python 字典的KeyError處理方法

    先看一段代碼:html

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

  運行結果以下:htm

image

   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

 

     總結,最簡單、最直接的方式仍是使用第一種方式,第二種方式具備很大的侷限性,第三種方式在一些特殊狀況下很合適使用。

相關文章
相關標籤/搜索