我在 python 中遇到了 Key 错误 [关闭]
- 2024-12-30 08:42:00
- admin 原创
- 101
问题描述:
在我的python程序中出现这个错误:
KeyError: 'variablename'
从此代码中:
path = meta_entry['path'].strip('/'),
谁能解释一下为什么会发生这种情况?
解决方案 1:
AKeyError
通常表示密钥不存在。那么,您确定密钥path
存在吗?
来自官方python文档:
异常KeyError
当在现有键集合中找不到映射(字典)键时引发。
例如:
>>> mydict = {'a':'1','b':'2'}
>>> mydict['a']
'1'
>>> mydict['c']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'c'
>>>
因此,尝试打印内容meta_entry
并检查是否path
存在。
>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}
或者,你可以这样做:
>>> 'a' in mydict
True
>>> 'c' in mydict
False
解决方案 2:
您也可以使用字典的 get()方法来避免异常。这也可以用于提供默认路径,而不是像None
下面这样。
>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
解决方案 3:
对于字典,只需使用
if key in dict
并且不要使用键列表中的搜索
if key in dict.keys()
后者将会更加耗费时间。
解决方案 4:
如果你使用 Python 3,我们可以简化一下
mydict = {'a':'apple','b':'boy','c':'cat'}
check = 'c' in mydict
if check:
print('c key is present')
如果你需要其他条件
mydict = {'a':'apple','b':'boy','c':'cat'}
if 'c' in mydict:
print('key present')
else:
print('key not found')
对于动态键值,也可以通过try-exception块处理
mydict = {'a':'apple','b':'boy','c':'cat'}
try:
print(mydict['c'])
except KeyError:
print('key value not found')
mydict = {'a':'apple','b':'boy','c':'cat'}
解决方案 5:
是的,这是由于不存在的密钥造成的。
在我的程序中,setdefault
出于效率考虑,我习惯于忽略此错误。这取决于此行的效率
>>> 'a' in mydict.keys()
在 Python 3 中,你也可以使用这个函数,
get(key[, default])
功能文档
据说它永远不会引发关键错误。
解决方案 6:
dict
当我使用嵌套解析时收到此错误for
:
cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
for attr in cat:
print(cats[cat][attr])
追溯:
Traceback (most recent call last):
File "<input>", line 3, in <module>
KeyError: 'K'
因为在第二个循环中应该cats[cat]
只是cat
(只是一个键)
所以:
cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
for attr in cats[cat]:
print(cats[cat][attr])
给予
black
10
white
8
解决方案 7:
这意味着你的字典中缺少你要找的键。我使用一个函数来处理这个问题,如果该键存在,则返回该值,否则返回默认值。
def keyCheck(key, arr, default):
if key in arr.keys():
return arr[key]
else:
return default
myarray = {'key1':1, 'key2':2}
print keyCheck('key1', myarray, '#default')
print keyCheck('key2', myarray, '#default')
print keyCheck('key3', myarray, '#default')
输出:
1
2
#default
解决方案 8:
例如,如果这是一个数字:
ouloulou={
1:US,
2:BR,
3:FR
}
ouloulou[1]()
它工作得很好,但 如果你使用例如:
ouloulou[input("select 1 2 or 3"]()
它不起作用,因为你的输入返回字符串“1”。所以你需要使用int()
ouloulou[int(input("select 1 2 or 3"))]()
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD