Python try / except с последовательностью Collatz

Я пытаюсь написать последовательность Collatz при добавлении try и except statement для определения того, вводит ли пользователь в строку noninteger, и я не могу понять, как это сделать. Если вы прочитали Try / Except in Python: как вы правильно игнорируете Исключения? , но я все еще в растерянности. Мой код:

def collatz(y): try: if y % 2 == 0: print(int(y/2)) return int(y/2) else: print(int(y*3+1)) return int(y*3 +1) except ValueError: print('Error: Invalid Value, the program should take in integers.') print('Please enter a number and the Collatz sequence will be printed') x = int(input()) while x != 1: x = collatz(x) 

При collatz() вводе программа выйдет из строя, прежде чем вы collatz() с кодом, когда вы его написали, а это означает, что ваш блок try не поймает исключение:

 def collatz(y): try: if y % 2 == 0: print(int(y/2)) return int(y/2) else: print(int(y*3+1)) return int(y*3 +1) except ValueError: print('Error: Invalid Value, the program should take in integers.') print('Please enter a number and the Collatz sequence will be printed') x = int(input()) # <-- THIS throws ValueError if input is non integer... while x != 1: x = collatz(x) # <-- ...but your try/except is in here. 

Вместо этого завершите преобразование ввода в том же try / except. Тогда в функции collatz() нет необходимости:

 def collatz(y): if y % 2 == 0: print(int(y/2)) return int(y/2) else: print(int(y*3+1)) return int(y*3 +1) print('Please enter a number and the Collatz sequence will be printed') try: x = int(input()) except ValueError: print('Error: Invalid Value, the program should take in integers.') exit() while x != 1: x = collatz(x)