引发用户输入异常

Raise an Exception on User Input

我正努力控制住自己的头脑 try/except。请看下面的代码....

status = raw_input('What is your status?')


#if x is anything other othan "citizen", "legal", or "illegal" raise a ValueError


try:
    status == "citizen" or status == "legal" or status == "illegal"
except:
    raise ValueError

所以,如果用户输入的不是指定的内容,我想引发 ValueError,但这种情况不会发生。我知道我可以只使用 If 语句并以这种方式引发 ValueError。但是为什么这也不起作用。如果 Try 块中的任何内容为 False,代码是否应该不跳转 except 块?

不,不应该。 try 的问题不是条件是否为真;它是语句块是否引发异常。您的 "status ==" 表达式不会引发异常,因此不会执行 "except" 块。

status = "other"

try:
    status == "citizen" or status == "legal" or status == "illegal"
except:
    raise ValueError

print "finished nicely"

输出:

finished nicely

而这个 确实给了我们一个例外:

status = "other"
option_dict = {
    "citizen": 1,
    "legal": 2,
    "illegal": 3
}

try:
    option = option_dict[status]
except:
    raise ValueError

print "finished nicely"

输出:

Traceback (most recent call last):
  File "/home/wdwickar/QA_Test/testcases/so.py", line 11, in <module>
    raise ValueError
ValueError

没有 try-except 块,我们得到

KeyError: 'other'