但是如果在查找的key不存在的时候就会报:KeyError:
比如你要查看print(dict['d'])
由于这个时候dict里面并没有这个key ,所以就会直接报错,那么这个时候其实python给我们提供了一种很棒的解决方法,那就是用
setdefault,用法如下: dict.setdefault(key,[这里设置如果不存在想将值设置为啥,默认为None])
那么这里我们可以用此方法解决:
print(dict.setdefault('d',0))
然后就没有问题啦,注意下就是setdefault是如果要想往dict中添加新值的时候就使用此函数,如果只是单纯想要做查找,碰到key不存在或者希望在通过这个键读取值的时候能得到一个默认值,那么建议用
defaultdict
首先先介绍下这个所谓的defaultdict,来自于collections模块,collections是个集合模块,defaultdict(function_factory)构建的是一个类似dictionary的对象,其中key的值,自行确定赋值,但是value的类型是function_factory的类实例,而且具有默认值.这里还引入了一个概念就是工厂函数,python的工厂函数就是指那些内建函数都是类对象,当你调用他们时,实际上是创建了一个类实例。比如int(),str(),set()等,这里我们看下例子:
import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = collections.defaultdict(list)
for k, v in s:
d[k].append(v)
print(d['yellow'])
print(d['white'])
print(list(d.items()))
我们最后得到的输出结果如下:
我们可以看到,当d中没有对应的key时最后返回的是个空列表,那是因为我们在设置defaultdict的时候用的工厂函数是list,而list的默认值是空列表,下面我们在看下如果工厂函数是set()会是什么样子
import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = collections.defaultdict(set)
for k, v in s:
d[k].add(v)
print(d['yellow'])
print(d['white'])
print(list(d.items()))
结果输出如下:
Python的字典一般都直接查找key ,比如dict={'a':1,'b':2,'c':3}print(dict['a'])但是如果在查找的key不存在的时候就会报:KeyError:比如你要查看print(dict['d'])由于这个时候dict里面并没有这个key ,所以就会直接报错,那么这个时候其实python给我们提供了一种很棒的解决方法,那就是用setdefa...
并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。
Item 对象是种简单的容器,保存了爬取到得数据。
其提供了 类似于字典(dictionary-like) 的API以及用于声明可用字段的简单语法。
虽然说Python现在有f开头的字符串用来格式化了,但是出于习惯,以及在部分场景下,比如需要混合使用原始字符串(raw string)的时候,感觉还是format函数好用。
这次写的时候遇到了奇怪的KeyError。我一开始是这么写的:
s = r'''
function foo() {
printf("{}");
'''.format(arg)
但是这样会报错。
后来发现,因为format自己用大括号作为占位符,如果字符串里本身有大括号,还得转义一下。具体怎么转义,就是用两个大括号,所以应该改成
出现这种错误,首先要看一下你是否使用了字典,错误提示的意思是找不到对应的键值。
例如,给定如下字典:
book_dict = {"price": 500, "bookName": "Python设计", "weight": "250g"}
若是查找字典中存在的key,则正常输出:
print(book_dict["price"])
运行结果如下:
若是查找字典中不存在的key,则报错:
print(book_dict["sdfs"])
如上所示,报错提示就是KeyError:。对于这种问题,可以使
问题:字典从文件中读出,字典中key含中文,明明有key,但是却报错KeyError:key不存在
预期:取出对应key的value
解决:将key前加上u,对key进行unicode编码
说明:从文件中读出的dict,其key被unicode编码了
>>> dict["小红"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '\xe5\xb0\x8f\xe7\xba\xa2'
错误反馈:KeyError: 'Arrival'
原因分析:一般KeyError原因都是因为想要找的那个某一项或几项在相应的数据集里找不到(或者是打错了之类的。)
例如:`arrivalDate = schedule['Arrival'] `
运行后报错:
`KeyError Traceback (most recent call last)
D:\Anaconda\lib\site-packages\panda...
第一种解决方法,首先测试key是否存在,然后才进行下一步操作,如:
第二种解决方法,修改要输出的值为a或b或c
转载自:Python 常见报错类型整理(一) - 小码果 - 博客园
Python3 str.format传入参数报错KeyError解决办法KeyError错误描述与解决补充知识
KeyError错误描述与解决
以’w’的方式调用参数,会产生KeyError报错
# 定义变量c
>>>c = {'w':'w', 'o': 'o', 'r': 'r', 'l': 'l', 'd': 'd'}
{'w':'w', 'o': 'o', 'r': 'r'...
`KeyError: -1` 表示在字典中使用了一个不存在的键 `-1`。通常情况下,当你使用字典的 `[]` 运算符时,如果指定的键在字典中不存在,Python 会抛出 `KeyError` 异常。
例如,以下代码会抛出 `KeyError` 异常:
``` python
my_dict = {'a': 1, 'b': 2}
print(my_dict['c']) # KeyError: 'c'
这是因为字典 `my_dict` 中不存在键为 `'c'` 的元素。
对于 `KeyError: -1` 错误,你需要检查代码中字典的使用,看看是否在字典中使用了一个不存在的键 `-1`。如果确实需要使用 `-1` 作为键,可以先使用 `in` 运算符判断该键是否存在,或者使用字典提供的 `get()` 方法,这样就不会因为使用一个不存在的键而抛出 `KeyError` 异常了。例如:
``` python
my_dict = {1: 'a', 2: 'b'}
if -1 in my_dict:
print(my_dict[-1])
else:
print("KeyError: -1")
# 或者使用 get() 方法
print(my_dict.get(-1, "KeyError: -1"))
上述代码中,首先使用 `in` 运算符判断 `-1` 是否在 `my_dict` 中,如果存在则使用 `my_dict[-1]` 获取对应值,否则打印 "KeyError: -1"。另外一种方法是使用 `get()` 方法获取对应值,如果键不存在则返回默认值 `"KeyError: -1"`。