我在python中遇到Key错误

Dav*_*iaw 174 python dictionary

在我的python程序中,我收到此错误:

KeyError: 'variablename'
Run Code Online (Sandbox Code Playgroud)

从这段代码:

path = meta_entry['path'].strip('/'),
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么会这样吗?

Ran*_*Rag 236

A 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'
>>>
Run Code Online (Sandbox Code Playgroud)

因此,尝试打印内容meta_entry并检查是否path存在.

>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}
Run Code Online (Sandbox Code Playgroud)

或者,您可以这样做:

>>> 'a' in mydict
True
>>> 'c' in mydict
False
Run Code Online (Sandbox Code Playgroud)


Ada*_*wis 118

我完全同意Key错误评论.您也可以使用字典的get()方法来避免异常.这也可用于提供默认路径,而不是None如下所示.

>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
Run Code Online (Sandbox Code Playgroud)

  • 非常相关的.get()评论+1.看起来像是一个很好的Python EAFP应用程序(更容易要求宽恕而非许可)而不是LBYL(Look Before You Leap),我认为它不像Pythonic. (8认同)

key*_*ind 29

对于dict,只需使用

if key in dict

而不是使用

if key in dict.keys()

这将是耗时的


Gle*_* Yu 5

是的,它很可能是由不存在的密钥引起的。

在我的程序中,出于效率考虑,我使用setdefault将此错误静音。取决于这条线的效率

>>>'a' in mydict.keys()  
Run Code Online (Sandbox Code Playgroud)

我也是Python的新手。实际上,我今天才学到它。因此,请原谅我对效率的无知。

在Python 3中,您也可以使用此功能,

get(key[, default]) [function doc][1]
Run Code Online (Sandbox Code Playgroud)

据说它永远不会引发关键错误。