先看一段代碼:
user = dict(name="brainliao", age=32) print(user["sex"])
運行結果如下:
user這個字典中沒有sex這個key,所以訪問user[“sex”]會報KeyError這個錯
有如下3中解決方式:
1、調用get(k, default)方法
user = dict(name="brainliao", age=32)
print(user.get("sex", "男"))
結果如下:
男
2、用collections.defaultdict()方法
import collections user = collections.defaultdict(str) print(user["sex"])
結果打印出空字符串
這個方法的含義在於指定了字典中的所有values均為字符串,並默認值為空字符串。所有調用user["sex"]不會報錯。但是這種方法有局限性,就是不適合不同的key對應不用類型的value的字典定義。
3、重定義__missing__方法
class User(dict):
def __missing__(self,key):
print("調用了 User的__missing__方法")
return "__missing__"
def __getitem__(self, item):
print("調用User 類的 __getitem__方法")
return super(User, self).__getitem__(item)
def get(self, k, d=None):
print("調用User 類的 get 方法")
return super(User, self).get(k, d)
user = User(name="brianliao", age=32)
print(user["sex"])
打印結果如下:
調用User 類的 __getitem__方法
調用了 User的__missing__方法
__missing__
從打印的結果可以看出,獲取字典key對應的值時,會去調用內部的__getitem__方法,而當__getitem__沒找到對應的key時,會調用__missing__方法。最終返回結果。
總結,最簡單、最直接的方式還是使用第一種方式,第二種方式具有很大的局限性,第三種方式在一些特殊情況下很合適使用。

