ValueError 仍然存在于 except 语句中
ValueError Still Present with Except Statement
我正在尝试创建一个程序来探索 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')
您在 n = int(input())
收到错误!
所以尝试做
try:
n = int(input())
except ValueError:
print('That is not a number')
完整代码(这样你就不会在 'n' 时出错):
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')
try...except
仅适用于这些词之间 运行 的代码,包括函数调用。如回溯所示,您的异常发生在第 14 行:
n = int(input()) # <---
这是由于您输入的字符串 (puppy
) 无法解释为以 10 为底的整数。
您需要将其包装在 try
... except
中;但更好的选择是采用并改编 this excellent answer.
中的函数
我正在尝试创建一个程序来探索 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')
您在 n = int(input())
收到错误!
所以尝试做
try:
n = int(input())
except ValueError:
print('That is not a number')
完整代码(这样你就不会在 'n' 时出错):
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')
try...except
仅适用于这些词之间 运行 的代码,包括函数调用。如回溯所示,您的异常发生在第 14 行:
n = int(input()) # <---
这是由于您输入的字符串 (puppy
) 无法解释为以 10 为底的整数。
您需要将其包装在 try
... except
中;但更好的选择是采用并改编 this excellent answer.