Python:try-except vs if-else来检查dict键

时间:2014-03-02 13:47:42

标签: python if-statement try-catch

我遇到的代码我不知何故发现'奇怪'。

var = None
try:
  var = mydict[a][b]
except:
  pass

我不太习惯使用try-except检查dict密钥,显然有一个if-else序列可以处理相同的情况。

var = None
if a in mydict:
    if b in mydict[a]:
        var = mydict[a][b]

使用一种方法优于另一种方法是否存在“明显的”优势/劣势?

3 个答案:

答案 0 :(得分:6)

异常处理通常比if语句慢得多。由于存在嵌套字典,因此很容易理解作者使用异常语句的原因。但是,以下内容也适用。

var = mydict.get(a,{}).get(b,None)

if var is None:
   print("Not found")
else:
   print("Found: " + str(var))

get对象在dict对象上的使用会在密钥不存在时返回默认值。

答案 1 :(得分:3)

请注意,在这种情况下,您可以选择:

var = mydict.get(a, {}).get(b)

答案 2 :(得分:3)

由于2个片段不相等这一事实导致了一个缺点,第一个是一个一揽子声明,它说无论发生什么,保持相当

要使它们相等,请修改第一个代码段以仅捕获KeyError

var = None
try:
  var = mydict[a][b]
except KeyError:
  pass

当他们站起来时,如果KeyError以外的其他内容发生,第二个片段将会崩溃,第一个片段会继续发生,这可能会引发更多问题。