zoukankan      html  css  js  c++  java
  • 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__方法。最终返回结果。

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

  • 相关阅读:
    学生宿舍水电管理系统 产品需求评审(用户故事)
    nyoj 14-会场安排问题 (贪心)
    好看的鼠标hover效果
    JavaScript-三种弹窗方式
    博客园美化夜间模式
    js写个小时钟
    js获取时间,循环执行任务,延迟执行任务
    Bzoj1103 [POI2007]大都市meg
    POJ2155 Matrix
    POJ3625 Building Roads
  • 原文地址:https://www.cnblogs.com/liaofeifight/p/6739421.html
Copyright © 2011-2022 走看看