我在Python 3.x中创建了以下测试:
answer = int(input("What's 5 x 8?"))
if answer == 40:
print("Correct!")
else:
print("Incorrect!")
answer = int(input("What's 4 + 7?"))
if answer == 11:
print("Correct!")
else:
print("Incorrect!")
answer = int(input("What's 9 - 4?"))
if answer == 5:
print("Correct!")
else:
print("Incorrect!")
但我不知道是否应该使用except
或except ValueError
来验证每个答案。
使用except
:
while True:
try:
answer = int(input("What's 5 x 8?"))
if answer == 40:
print("Correct!")
else:
print("Incorrect!")
break
except:
print("That's not a valid answer. Enter an integer.")
#This would be repeated for the two other questions
使用except ValueError
:
while True:
try:
answer = int(input("What's 5 x 8?"))
if answer == 40:
print("Correct!")
else:
print("Incorrect!")
break
except ValueError:
print("That's not a valid answer. Please enter an integer.")
#This would be repeated for the two other questions
我只想要接受整数(例如'400','3'等)。在我的情况下哪一个更好用?
答案 0 :(得分:3)
Bare except
几乎绝不是正确的事情,所以你可能想要抓住ValueError
。
裸except
的问题在于,它会抓住任何,包括KeyboardInterrupt
,SystemExit
等等。即使您成为了更具限制性并且做:
try:
...
except Exception:
...
你仍然可以最终掩盖所有类型的编程错误(例如,如果你不小心错误拼写了一个属性并且代码正在提升AttributeError
- 你将抓住该异常并追踪导致的错误会更难)。
我的规则是只有在您知道如何处理异常时才会捕获异常。在这种情况下,您知道如何处理该代码块中的ValueError
,但您不知道如何处理TypeError
或AttributeError
或其他任何事情。所以,你应该处理ValueError
而不是别的。
答案 1 :(得分:0)
如果要验证整数,则应该使用ValueError。
答案 2 :(得分:0)
不在要捕获异常的上下文中使用裸except
。如果要捕获与程序退出无关的各种异常 ,大多数情况都是如此,请使用except Exception
。但具体来说总是一个好主意。
在while循环中,你突然break
出局。如果您只想在收到正确答案时突破,那么:
while True:
try:
x = int(input("8 + 21 :"))
except ValueError:
print("Enter a valid number")
else:
if x == 29:
break
else:
continue # this is not required, just being explicit
看看它是否有效。