Python - 验证整数 - 除了ValueError之外还是其他?

时间:2016-04-05 21:44:58

标签: python

我在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!")

但我不知道是否应该使用exceptexcept 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'等)。在我的情况下哪一个更好用?

3 个答案:

答案 0 :(得分:3)

Bare except几乎绝不是正确的事情,所以你可能想要抓住ValueError

except的问题在于,它会抓住任何,包括KeyboardInterruptSystemExit等等。即使您成为了更具限制性并且做:

try:
    ...
except Exception:
    ...

你仍然可以最终掩盖所有类型的编程错误(例如,如果你不小心错误拼写了一个属性并且代码正在提升AttributeError - 你将抓住该异常并追踪导致的错误会更难)。

我的规则是只有在您知道如何处理异常时才会捕获异常。在这种情况下,您知道如何处理该代码块中的ValueError,但您不知道如何处理TypeErrorAttributeError或其他任何事情。所以,你应该处理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

看看它是否有效。