避免 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 中建立新條目。