我遇到的代码我不知何故发现'奇怪'。
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]
使用一种方法优于另一种方法是否存在“明显的”优势/劣势?
答案 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
以外的其他内容发生,第二个片段将会崩溃,第一个片段会继续发生,这可能会引发更多问题。