我想从Python KeyError
例外获取密钥名称:
例如:
myDict = {'key1':'value1'}
try:
x1 = myDict['key1']
x2 = myDict['key2']
except KeyError as e:
# here i want to use the name of the key that was missing which is 'key2' in this example
print error_msg[missing_key]
我已经尝试过这个
print e
print e.args
print e.message
我的代码在django视图里面!
如果我使用ipython例如并尝试e.arg或e.message它工作正常。 但后来我在django视图中尝试它,我得到了这个结果:
"Key 'key2' not found in <QueryDict: {u'key1': [u'value']}>"
("Key 'key2' not found in <QueryDict: {u'key1': [u'value']}>",)
Key 'key2' not found in <QueryDict: {u'key1': [u'value']}>
虽然我只想要'key2'
答案 0 :(得分:50)
您可以使用e.args
:
[53]: try:
x2 = myDict['key2']
except KeyError as e:
print e.args[0]
....:
key2
来自docs:
except子句可以在异常名称后面指定一个变量(或者 元组)。该变量与一个异常实例绑定 存储在
中的参数instance.args
答案 1 :(得分:3)
myDict = {'key1':'value1'}
try:
x1 = myDict['key1']
x2 = myDict['key2']
except KeyError as e:
# here i want to use the name of the key that was missing which is 'key2' in this example
print "missing key in mydict:", e.message
答案 2 :(得分:2)
异常对象将是缺少的键
a={"a":1}
try:
print(a["b"])
except KeyError as e:
print(e) #prints "b"
答案 3 :(得分:1)
对于KeyErrors,sys.exc_info()的第二个元素(索引1)保存密钥:
import sys
try:
x1 = myDict['key1']
x2 = myDict['key2']
except KeyError:
print 'KeyError, offending key:', sys.exc_info()[1]
输出:
KeyError,违规密钥:'key2'
答案 4 :(得分:0)
myDict = {'key1':'value1'}
try:
x1 = myDict['key1']
x2 = myDict['key2']
except KeyError as e:
print e.message
在这种情况下,将打印key2
已编辑以添加...
不熟悉django但是如果e.message
是一致的(并且始终是字符串),则可以使用普通的字符串方法提取密钥,例如。
my_non_key = e.message.split(" ")[1]
或类似的正则表达式?
答案 5 :(得分:-3)
由于您的字典实际上是QueryDict
,因此返回不同的错误消息,您需要解析异常消息以返回单引号中的第一个单词:
import re
#...
except KeyError as e:
m = re.search("'([^']*)'", e.message)
key = m.group(1)