Python Forum

Full Version: Try/Except clauses not working?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Would be great if someone could tell me why the Except clause doesn’t catch the exception below. Thanks.

def collatz(number):
    try:
        if number % 2 == 0:
            m = number // 2
            print(m)
            return(m)
        else:
            m = 3 * number + 1
            print(m)
            return(m)
    except ValueError:
        print('Error: Must enter an integer')


n = input('Enter number: \n')
# n = int(n)
while n != 1:
    n = collatz(n)
Error:
Enter number: 15 Traceback (most recent call last): File "/Users/admin/PycharmProjects/hello/collatz.py", line 18, in <module> n = collatz(n) File "/Users/admin/PycharmProjects/hello/collatz.py", line 3, in collatz if number % 2 == 0: TypeError: not all arguments converted during string formatting
you catch ValueError in the except part, but what you get is TypeError, so it is not handled and is raised.
Note that you need to convert number to int or float before apply modulo %. Now it is str and % is treated as old-style string formatting.