先看一段代碼:html
user = dict(name="brainliao", age=32) print(user["sex"])
運行結果以下:htm
user這個字典中沒有sex這個key,因此訪問user[「sex」]會報KeyError這個錯blog
有以下3中解決方式:ip
一、調用get(k, default)方法字符串
user = dict(name="brainliao", age=32) print(user.get("sex", "男"))
結果以下:get
男it
二、用collections.defaultdict()方法io
import collections user = collections.defaultdict(str) print(user["sex"])
結果打印出空字符串
這個方法的含義在於指定了字典中的全部values均爲字符串,並默認值爲空字符串。全部調用user["sex"]不會報錯。可是這種方法有侷限性,就是不適合不一樣的key對應不用類型的value的字典定義。
三、重定義__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__class
從打印的結果能夠看出,獲取字典key對應的值時,會去調用內部的__getitem__方法,而當__getitem__沒找到對應的key時,會調用__missing__方法。最終返回結果。import
總結,最簡單、最直接的方式仍是使用第一種方式,第二種方式具備很大的侷限性,第三種方式在一些特殊狀況下很合適使用。