在我的python程序中,我收到此错误:
KeyError: 'variablename'
从这段代码:
path = meta_entry['path'].strip('/'),
任何人都可以解释为什么会这样吗?
答案 0 :(得分:216)
KeyError
通常表示密钥不存在。那么,您确定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
答案 1 :(得分:114)
我完全同意Key错误评论。您也可以使用dictionary's get()方法来避免异常。这也可用于提供默认路径,而不是None
,如下所示。
>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
答案 2 :(得分:25)
对于dict,只需使用
if key in dict
而不是使用
if key in dict.keys()
这将非常耗时
答案 3 :(得分:4)
是的,很可能是由非完全密钥引起的。
在我的程序中,为了提高效率,我使用setdefault来缓解此错误。 取决于这条线的效率
>>>'a' in mydict.keys()
我也是Python新手。事实上,我今天刚刚学会了它。所以请原谅我对效率的无知。
在Python 3中,您也可以使用此功能
get(key[, default]) [function doc][1]
据说永远不会引起关键错误。
答案 4 :(得分:3)
这意味着您的阵列缺少您正在寻找的密钥。我使用一个函数来处理它,如果它存在,则返回值或者返回默认值。
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
答案 5 :(得分:2)
我在使用嵌套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
答案 6 :(得分:1)
如果您使用的是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'}
答案 7 :(得分:0)
例如,如果这是一个数字:
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"))]()