尝试/抓住或者如果?

时间:2014-01-11 18:24:43

标签: python if-statement try-catch

使用是否更好:

var = "Test"
dictionary = {"test": "test", "test2": "test2"}
try:
    var2 = dictionary[var]

except KeyError:
    pass

或:

var = "test"
if (var == "test" or var == "test2"):
    dosomething()

其中哪一种更好的方法? 此代码旨在防止用户输入该字符串 无效。

3 个答案:

答案 0 :(得分:2)

嗯,老实说,这些方法都不理想。第一个使用dict作为副作用,并且不必要地冗长;当有很多or串在一起时,第二个是非常笨拙的写作和阅读。

我建议您使用in运算符和set

if var in {'test','test2'}:
    #do something

在您的第一个示例中,您使用dict作为set替补,您应该使用正确的set。当您实际将键映射到值时,您希望使用dict

答案 1 :(得分:0)

如果您希望var值只是其中一个,请使用以下模式:

var = 'test'
allowed = 'one', 'two', 'three', 'test'

if var in allowed:
    doSomething()
else:
    doSomethingElse()

对于字典,您可以像这样修改条件:

if var in dictionary.keys():

答案 2 :(得分:-1)

我会选择try / except,主要是因为您不必明确列出所有可接受的值。你可以使用if var in dictionary.keys(),但为什么不只是一个内置的字典方法?

value = dictionary.get(var) # if it does not find var in the dictionary, returns None
if value is None:
    doSomething()

当然,当你有这样的字典时,这不能正常工作:{var: None};它将返回None,无论它是否可以在字典中找到。但是如果你不期望任何NoneType个对象作为值,那么这就是要走的路:)。