我正在尝试创建一个用于探索collatz序列的程序。它一直有效,直到我尝试添加try
和except
语句,以确保用户输入数字而不是文本。以下是代码:
def collatz(number):
try:
if number % 2 == 0:
print(number // 2)
return number // 2
elif number % 2 == 1:
result = 3 * number + 1
print(result)
return result
except ValueError:
print('That is not a number')
print('Enter a number')
n = int(input())
while n != 1:
n = collatz(int(n))
如果我输入数字,我可以毫无问题地运行它。但是,当我输入" puppy"我遇到了这个:
Traceback (most recent call last):
File "C:/Users/kredeker/Desktop/python/collatz2.py", line 14, in <module>
n = int(input())
ValueError: invalid literal for int() with base 10: 'puppy'
我以为我用ValueError
计算了这个:
except ValueError:
print('That is not a number')
答案 0 :(得分:2)
您收到错误n = int(input())
!
所以试试
try:
n = int(input())
except ValueError:
print('That is not a number')
完整的代码(以免您在&#39; n&#39;中出错):
def collatz(number):
if number % 2 == 0:
print(number // 2)
return number // 2
elif number % 2 == 1:
result = 3 * number + 1
print(result)
return result
print('Enter a number')
try:
n = int(input())
while n != 1:
n = collatz(n)
except ValueError:
print('That is not a number')
答案 1 :(得分:2)
try...except
仅适用于在这些单词之间运行的代码,包括函数调用。回溯显示,您的异常发生在第14行:
n = int(input()) # <---
是由您输入的字符串(puppy
)无法解释为基数为10的整数引起的。
您需要将其包含在try
... except
内;但更好的选择是采用 - 并适应 - this excellent answer的功能。