python 提示 keyError 的4种解决方法

python 提示 keyError 的4种解决方法https blog csdn net u0 article details 在读取 dict 的 key 和 value 时 如果 key 不存在 就会触发 KeyError 错误 如 Python t a 1 b 2 c 3 print t d 就会出现

https://blog.csdn.net/u0/article/details/

在读取dictkeyvalue时,如果key不存在,就会触发KeyError错误,如:

Python

 
  1. t = {
  2. 'a': '1',
  3. 'b': '2',
  4. 'c': '3',
  5. }
  6. print(t['d'])

就会出现:

KeyError: 'd' 

第一种解决方法

首先测试key是否存在,然后才进行下一步操作,如:

Python

 
  1. t = {
  2. 'a': '1',
  3. 'b': '2',
  4. 'c': '3',
  5. }
  6. if 'd' in t:
  7. print(t['d'])
  8. else:
  9. print('not exist')

会出现:

not exist 

第二种解决方法

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

Python

 
  1. t = {
  2. 'a': '1',
  3. 'b': '2',
  4. 'c': '3',
  5. }
  6. print(t.get('d'))

会出现:

None 

加上default参数:

Python

 
  1. t = {
  2. 'a': '1',
  3. 'b': '2',
  4. 'c': '3',
  5. }
  6. print(t.get('d', 'not exist'))
  7. print(t)

会出现:

not exist {'a': '1', 'c': '3', 'b': '2'} 

第三种解决方法

利用dict内置的setdefault(key[,default])方法,如果key存在,则返回其value;否则插入此key,其valuedefault,并返回default;使用这个方法也永远不会触发KeyError,如:

Python

 
  1. t = {
  2. 'a': '1',
  3. 'b': '2',
  4. 'c': '3',
  5. }
  6. print(t.setdefault('d'))
  7. print(t)

会出现:

None {'b': '2', 'd': None, 'a': '1', 'c': '3'} 

加上default参数:

Python

 
  1. t = {
  2. 'a': '1',
  3. 'b': '2',
  4. 'c': '3',
  5. }
  6. print(t.setdefault('d', 'not exist'))
  7. print(t)

会出现:

not exist {'c': '3', 'd': 'not exist', 'a': '1', 'b': '2'} 

第四种解决方法

向类dict增加__missing__()方法,当key不存在时,会转向__missing__()方法处理,而不触发KeyError,如:

Python

 
  1. t = {
  2. 'a': '1',
  3. 'b': '2',
  4. 'c': '3',
  5. }
  6. class Counter(dict):
  7. def __missing__(self, key):
  8. return None
  9. c = Counter(t)
  10. print(c['d'])

会出现:

None 

更改return值:

Python

 
  1. t = {
  2. 'a': '1',
  3. 'b': '2',
  4. 'c': '3',
  5. }
  6. class Counter(dict):
  7. def __missing__(self, key):
  8. return key
  9. c = Counter(t)
  10. print(c['d'])
  11. print(c)

会出现:

d {'c': '3', 'a': '1', 'b': '2'} 

第五种解决方法

利用collections.defaultdict([default_factory[,...]])对象,实际上这个是继承自dict,而且实际也是用到的__missing__()方法,其default_factory参数就是向__missing__()方法传递的,不过使用起来更加顺手:
如果default_factoryNone,则与dict无区别,会触发KeyError错误,如:

Python

 
  1. import collections
  2. t = {
  3. 'a': '1',
  4. 'b': '2',
  5. 'c': '3',
  6. }
  7. t = collections.defaultdict(None, t)
  8. print(t['d'])

会出现:

KeyError: 'd' 

但如果真的想返回None也不是没有办法:

Python

 
  1. import collections
  2. t = {
  3. 'a': '1',
  4. 'b': '2',
  5. 'c': '3',
  6. }
  7. def handle():
  8. return None
  9. t = collections.defaultdict(handle, t)
  10. print(t['d'])

会出现:

None 

如果default_factory参数是某种数据类型,则会返回其默认值,如:

Python

 
  1. import collections
  2. t = {
  3. 'a': '1',
  4. 'b': '2',
  5. 'c': '3',
  6. }
  7. t = collections.defaultdict(int, t)
  8. print(t['d'])

会出现:

0 

又如:

Python

 
  1. import collections
  2. t = {
  3. 'a': '1',
  4. 'b': '2',
  5. 'c': '3',
  6. }
  7. t = collections.defaultdict(list, t)
  8. print(t['d'])

会出现:

[] 

Python

 
  1. import collections
  2. t = {
  3. 'a': '1',
  4. 'b': '2',
  5. 'c': '3',
  6. }
  7. t = collections.defaultdict(dict, t)
  8. print(t['d']['y'])

会出现:

KeyError: 'y'
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213185.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:22
下一篇 2026年3月18日 下午6:22


相关推荐

  • hi3516dv300 sdk_Hi3516DV300

    hi3516dv300 sdk_Hi3516DV300Hi3516DV300编译环境搭建问题及解决1.安装完工具链,提示找不到gcc问题:bash:/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-gcc:没有那个文件或目录。安装完工具链,提示找不到gcc,但实际gcc工具已经安装上是由于开发环境是32位的,而当前的ubuntu是64位的解…

    2026年2月25日
    7
  • mybatais的时间筛选「建议收藏」

    mybatais的时间筛选「建议收藏」mybatais的时间筛选

    2022年4月23日
    50
  • PyCharm常用设置(图解)

    PyCharm常用设置(图解)1.保存设置pycharm中的设置是可以导入和导出的,file>exportsettings可以保存当前pycharm中的设置为jar文件保存在桌面上2.导入设置重装时可以直接importsettings>jar文件,就不用重复配置了确认是否要导入点击确认重新启动3.设置Python自动引入包设置Python自动引入包,要先在…

    2022年8月27日
    8
  • Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证要对接微信公众平台的”开发模式”,即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MPSDK微信公众平台开发教程(一):微信公众平台注册),等待官方审核,审核通过之后,会在后台顶部出现“高级功能”菜单。使用“高级功能”>“开发模式”之前,必须有一个已经部署在Internet上,可以用80端口访问的网站(域名或IP访问都可以),一些…

    2022年8月21日
    10
  • Python学习:关键字global和nonlocal的用法说明

    Python学习:关键字global和nonlocal的用法说明一、globalglobal关键字用来在函数或其他局部作用域中使用全局变量。1.1如果局部要对全局变量修改,而不使用global关键字。count=0defglobal_test():count+=1print(count)global_test()会出现如下错误:1.2如果局部要对全局变量修改,应在局部声明该全局变量。co…

    2025年9月22日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号