处理或引发Python异常是否有效?

处理或引发Python异常是否有效?,python,dictionary,exception-handling,Python,Dictionary,Exception Handling,最近,我一直在使用一些大型词典(大型含义~数千个元素),因此我一直在雇佣这个小家伙: try: dict[key] #do something except KeyError: pass 代替 if key in dict.keys() #do something 我想知道在哪种字典大小下,前者比后者更有效?根据我的理解,如果keys()很小,那么第二种方法会更快,但是在什么情况下使用第一种方法会变得更好呢 if key in dict.keys(): Py

最近,我一直在使用一些大型词典(大型含义~数千个元素),因此我一直在雇佣这个小家伙:

try:
    dict[key]
    #do something
except KeyError:
    pass
代替

if key in dict.keys()
    #do something
我想知道在哪种字典大小下,前者比后者更有效?根据我的理解,如果
keys()
很小,那么第二种方法会更快,但是在什么情况下使用第一种方法会变得更好呢

if key in dict.keys():
Python2.x必须进行O(N)比较以确定
key
是否在
dict
中,因为
dict.keys()
返回一个键列表。(但在Python3.x中这很好,因为它返回一个类似集合的视图对象,所以查找速度会更快)

相反,像这样使用常量时间查找

if key in dict:

这将计算
键的哈希值
并在
dict

或我个人最喜欢的:a=dict.get(key,None)@fileoffset True中查找,如果您希望避免异常并获取默认值,可以这样做。但是OP正在尝试执行键查找,因此我同意使用方法:-)中的
,尽管您也可以使用:
,如果a:
来模拟:)