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