python 字典的KeyError处理方法
先看一段代码:
user = dict(name="brainliao", age=32)
print(user["sex"])
运行结果如下:

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__方法。最终返回结果。
总结,最简单、最直接的方式还是使用第一种方式,第二种方式具有很大的局限性,第三种方式在一些特殊情况下很合适使用。
python 字典的KeyError处理方法的更多相关文章
- python字典改变value值方法总结
今天这篇文章中我们来了解一下python之中的字典,在这文章之中我会对python字典修改进行说明,以及举例说明如何修改python字典内的值.我们开始进入文章吧. 首先我们得知道什么是修改字典 修改 ...
- python字典对象的update()方法
使用字典对象的update()方法,如A.update(B),将B字典的键值对一次性全部添加到A字典对象,当A字典为空时,相当于深复制,非常方便.如果两个字典中存在相同的键,则进行值的更新. A={} ...
- python 字典的定义以及方法
7.字典的转换: dict(x=1,y=2) ==> {'y': 2, 'x': 1} dict([(i,element) for i, element in enumerate(['one ...
- python 字典中的get()方法
https://blog.csdn.net/weixin_38705903/article/details/79231551
- Python 字典方法
访问字典的值 字典中的 键/值 实际上就是一种映射关系,只要知道了 “键”,就肯定知道 “值”. >>> my_dict = dict(name = 'zhangsan',other ...
- Python 字典 popitem() 方法
描述 Python 字典 popitem() 方法随机返回并删除字典中的一个键/值对(一般删除末尾对). 如果字典已经为空,却调用了此方法,就报出KeyError异常. 语法 popitem() 方法 ...
- python之字典二 内置方法总结
Python字典包含了以下内置方法: clear()函数用于删除字典内所有元素 dict1 = {, 'Class': 'First'} print('the start len %d' % len( ...
- python字典copy()方法
python 字典的copy()方法表面看就是深copy啊,明显独立 d = {'a':1, 'b':2} c = d.copy() print('d=%s c=%s' % (d, c)) Code1 ...
- Python 字典(Dictionary) get()方法
描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: dict.get(key, default=None) 参数 ...
随机推荐
- Eclipse 报 "The builder launch configuration could not be found" 错误的解决办法
http://blog.csdn.net/defonds/article/details/26340561 Eclipse 忽然报 "The builder launch configura ...
- pdf转tiff
概述 基于Java,将pdf转成单一的tiff文件. MAVEN依赖 <groupId>com.sun.media</groupId> <artifactId>ja ...
- POJ 3660 Cow Contest (dfs)
Cow Contest Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11129 Accepted: 6183 Desc ...
- 【数据结构】 最小生成树(二)——kruskal算法
上一期说完了什么是最小生成树,这一期咱们来介绍求最小生成树的算法:kruskal算法,适用于稀疏图,也就是同样个数的节点,边越少就越快,到了数据结构与算法这个阶段了,做题靠的就是速度快,时间复杂度小. ...
- 输入输出格式之Python版
# 有多组输入数据,但没有具体的告诉你有多少组,只是让你对应每组输入,应该怎样输出. while True: try: a, b = map(int, raw_input().strip().spli ...
- [BZOJ 2298] Problem A
Link: BZOJ 2298 传送门 Solution: 可以将每个人的话转化为$[l[i],r[i]]$的人得分相同 用$map$记录认为$[i,j]$相同的人数,$pos[i][j]$记录以$i ...
- Gauss 消元(模板)
/* title:Gauss消元整数解/小数解整数矩阵模板 author:lhk time: 2016.9.11 没学vim的菜鸡自己手打了 */ #include<cstdio> #in ...
- BZOJ 3343:教主的魔法(分块)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3343 [题目大意] 给出一个数列,有区间加法操作,询问区间大于等于c的数字个数 [题解 ...
- php函数前面加&符号 和 变量前面加&符号的意义
php函数前面加&符号 和 变量前面加&符号的意义 php函数前面加&符号的意思是函数的引用返回,php函数前面加&符号有什么作用呢 function &tes ...
- 陈立伟 - MultiCharts快易通(2013年8月2日)
<MultiCharts快易通> 作 者:陈立伟 译 者: 系 列:寰宇程式交易312--挑战程式交易系列1 出 版:寰宇出版股份有限公司 字 数:千字 阅读完成:2013年8月2日