python 字典的KeyError处理方法

    先看一段代码:

user = dict(name="brainliao", age=32)
print(user["sex"])

  运行结果如下:

image

   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__方法。最终返回结果。

 

     总结,最简单、最直接的方式还是使用第一种方式,第二种方式具有很大的局限性,第三种方式在一些特殊情况下很合适使用。

posted @ 2017-04-20 16:25  廖飞  阅读(20965)  评论(0编辑  收藏  举报