先看一段代码: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
总结,最简单、最直接的方式仍是使用第一种方式,第二种方式具备很大的局限性,第三种方式在一些特殊状况下很合适使用。