欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

python中避免KeyError的三种方法

Python基础 迷途小书童 4年前 (2020-08-25) 8217次浏览 0个评论

软硬件环境

  • windows 10 64bit
  • anaconda3 with python 3.7

视频看这里

此处是 youtube 的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。

简介

python 中获取字典 dictkeyvalue 时,如果 key 不存在,就会触发 KeyError 错误,如下

In [1]: aDict = {"p":"python", "j":"java", "g":"golang", "s":"swift"}

In [2]: aDict['r']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-2-09bddfcc18bc> in <module>
----> 1 aDict['r']

KeyError: 'r'

In [3]:

以下介绍几种可以避免上述 KeyError 的方法

方法一

首先判断下 key 是否存在,如果存在,则去获取 value

In [4]: if 'r' in aDict:
   ...:     print(aDict['r'])
   ...: else:
   ...:     print('r not in aDict.')
   ...:
r not in aDict.

In [5]:

方法二

利用 dict 内置的 get(key[,default]) 方法,如果 key 存在,则返回其 value,否则返回 default。使用这个方法永远不会触发 KeyError

In [5]: aDict.get('r')

In [6]:

默认情况下,default 是空。当然你可以去修改 default

In [6]: aDict.get('r', 'not in aDict.')
Out[6]: 'not in aDict.'

In [7]:

方法三

dict 的派生类中增加 __missing__() 方法,当 key 不存在时,会转向 __missing__() 方法处理,而不触发 KeyError。看下面的示例

In [11]: class Languages(dict):
    ...:     def __missing__(self, key):
    ...:         return 'key not exist.'
    ...:

In [12]: l = Languages(aDict)

In [13]: l['r']
Out[13]: 'key not exist.'

In [14]:
喜欢 (0)

您必须 登录 才能发表评论!