11年it研发经验,从一个会计转行为算法工程师,学过C#,c++,java,android,php,go,js,python,CNN神经网络,四千多篇博文,三千多篇原创,只为与你分享,共同成长,一起进步,关注我,给你分享更多干货知识!

本文讲得不是键盘的key,是python字典dict的key

当dict取值时,key在dict的key()中不存在,就会报错

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

Python

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

就会出现:


KeyError: 'd'

第一种解决方法

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

Python

t = {'a': '1','b': '2','c': '3',
}
if 'd' in t:print(t['d'])
else:print('not exist')

会出现:


not exist

第二种解决方法

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

Python

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

会出现:


None

加上default参数:

Python

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

会出现:


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

第三种解决方法

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

Python

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

会出现:


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

加上default参数:

Python

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

会出现:


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

第四种解决方法

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

Python

t = {'a': '1','b': '2','c': '3',
}class Counter(dict):def __missing__(self, key):return None
c = Counter(t)
print(c['d'])

会出现:


None

更改return值:

Python

t = {'a': '1','b': '2','c': '3',
}class Counter(dict):def __missing__(self, key):return key
c = Counter(t)
print(c['d'])
print(c)

会出现:


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

第五种解决方法

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

Python

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

会出现:


KeyError: 'd'

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

Python

import collections
t = {'a': '1','b': '2','c': '3',
}def handle():return None
t = collections.defaultdict(handle, t)
print(t['d'])

会出现:


None

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

Python

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

会出现:


0

又如:

Python

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

会出现:


[]

注意:
如果dict内又含有dictkey嵌套获取value时,如果中间某个key不存在,则上述方法均失效,一定会触发KeyError

Python

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

会出现:


KeyError: 'y'

python keyerror(0)相关推荐

  1. Comprehensive Guide to build a Recommendation Engine from scratch (in Python) / 从0开始搭建推荐系统...

    https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-recommendation-engine-python/, 一篇详细 ...

  2. Python之父:Python 4.0可能不会来了

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨机器之心 编辑丨极市平台 导读 不要对 Python 4.0 ...

  3. Python 之父:Python 4.0 可能不会来了

    来源:机器之心本文约1400字,建议阅读5分钟不要对 Python 4.0 抱有希望,可能不会有的. 不要对 Python 4.0 抱有希望,可能不会有的.--Python 之父 Guido van ...

  4. python KeyError: 4

    KeyError: 4 还是因为dict字典没有这个key d={1:"sd",2:5}print(d[0]) 这个会报错: KeyError: 0 在读取

  5. python 3.0 print_Python 3.x 新特性及10大变化

    python 3.x 起始版本是Python 3.0,目前的最新版本是 3.3.3 Python之父Guido van Rossum谈到了Python 3.0的构思: 一直以来,除非要打破向后兼容性, ...

  6. Python 之父:别等了,Python 4.0 可能不会来了

    来自:机器之心 不要对 Python 4.0 抱有希望,可能不会有的.--Python 之父 Guido van Rossum 2020 年 1 月 1 日,Python 官方结束了对 Python ...

  7. python中0、1、True、False、if条件

    总结: 无论是python还是C++,true=1,false=0 非零就是true,此说法只应用在判断条件中 1.python中0.1.True.False >>> print(T ...

  8. 为什么Python 4.0不会像Python 3.0

    在提出向后不兼容的更改(这些更改不提供从当前合法的Python 3代码提供清晰的移植路径)时,使用python-ideas的新手偶尔会参考" Python 4000"的思想. 毕竟 ...

  9. 为什么python除法结果会有小数点0_为什么Python返回0进行简单的除法计算?

    为什么Python返回0进行简单的除法计算? 内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用回答 (2) 关注 (0) 查看 (296)为什么这个简单的 ...

最新文章

  1. pwdencrypt,pwdcompare
  2. Linux操作系统Ubuntu部署Oracle篇
  3. MyBatis-02 MyBatis XML方式概述及配置步骤
  4. 开始复习下sql,常用SQL语句示例(一)
  5. linux系统网络对时,Linux系统网络优化【转】
  6. 利用延迟关联或者子查询优化超多分页场景
  7. photoshop cs5快捷键的用法总结
  8. C语言学习笔记---字符读取函数scanf()、gets()、fgets()
  9. 在Mac系统下架设WiFi热点,对比Win7
  10. 《ES6标准入门》学习笔记
  11. enlightenment提权的工具
  12. 从Logistic Regression 到 Neural Network
  13. python嵌套函数return_python嵌套函数
  14. 怎么利用Excel实现随机取样
  15. 老师必备的数学几何绘图软件,赶紧收藏!
  16. 网络丢包的四大原因和修复方法
  17. 如何制定一份测试工程师年度计划
  18. 猫眼CEO郑志昊:为什么说产品思维已“死”?
  19. box2d的角色邹形
  20. SQL不同服务器数据库之间的数据操作整理(完整版)(转)

热门文章

  1. 层次聚类多维度matlab实现_第34集 python机器学习:凝聚聚类
  2. 算法 求一个数组的最长递减子序列 C
  3. 如何放出Linux内核中的链表大招
  4. ubuntu16.04开机卡死解决方案
  5. php 析构不执行,PHP析构方法 __destruct() 不触发的两个解决办法
  6. 杭州java班学费多少_杭州学java费用多少
  7. python从入门到项目实战李兴华网盘_贺胜军Python轻松入门到项目实战【经典完整版】...
  8. Java -cp 使用
  9. 每日一皮:这设计师真有才...
  10. 为什么要强制弃坑Fastjson而主推Jackson?