我在Python中得到关键错误

在我的Python程序中,我得到这个错误:

KeyError: 'variablename' 

从这个代码:

 path = meta_entry['path'].strip('/'), 

任何人都可以解释为什么发生这种情况?

KeyError通常意味着密钥不存在。 那么,你确定path密钥存在吗?

从官方的python文档:

exceptionKeyError

当在一组现有密钥中找不到映射(字典)键时引发。

例如:

 >>> 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 

我完全同意关键的错误评论。 你也可以使用字典的get()方法来避免exception。 这也可以用来给出一个默认path而不是None ,如下所示。

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

对于字典,请使用

if key in dict

而不是使用

if key in dict.keys()

这将是非常耗时的

是的,这很可能是由不存在的钥匙引起的。

在我的程序中,为了提高效率,我使用了setdefault来静音这个错误。 取决于这条线的效率

 >>>'a' in mydict.keys() 

我也是Python新手。 其实我今天才知道。 所以请原谅我对效率的无知。

在Python 3中,你也可以使用这个函数,

 get(key[, default]) [function doc][1] 

据说它永远不会提出一个关键的错误。

这意味着你的数组缺less你正在寻找的键。 我用一个函数来处理这个函数,如果它存在的话它会返回值,或者它会返回一个默认值。

 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