避免 KeyError 异常
使用字典时常见的一个缺陷是访问不存在的密钥。这通常会导致 KeyError
异常
mydict = {}
mydict['not there']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'not there'
避免键错误的一种方法是使用 dict.get
方法,该方法允许你指定在缺少键时返回的默认值。
value = mydict.get(key, default_value)
如果存在则返回 mydict[key]
,否则返回 default_value
。请注意,这不会将 key
添加到 mydict
。因此,如果要保留该键值对,则应使用 mydict.setdefault(key, default_value)
,它会存储键值对。
mydict = {}
print(mydict)
# {}
print(mydict.get("foo", "bar"))
# bar
print(mydict)
# {}
print(mydict.setdefault("foo", "bar"))
# bar
print(mydict)
# {'foo': 'bar'}
处理问题的另一种方法是捕获异常
try:
value = mydict[key]
except KeyError:
value = default_value
你还可以检查密钥是否为字典。
if key in mydict:
value = mydict[key]
else:
value = default_value
但请注意,在多线程环境中,可以在检查后从字典中删除密钥,从而创建一个仍然可以抛出异常的竞争条件。
另一个选择是使用 dict 的子类 collections.defaultdict,它有一个 default_factory,在给定 new_key 时在 dict 中创建新条目。