37

KeyErrorPython例外からキー名を取得したいと思います。

例えば:

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 view の中にあります!

たとえば 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」が欲しいだけなのに

4

6 に答える 6

93

使用できますe.args

[53]: try:
    x2 = myDict['key2']
except KeyError as e:    
    print e.args[0]
   ....:     
key2

ドキュメントから:

except 句では、例外名 (またはタプル) の後に変数を指定できます。変数は、引数が格納されている例外インスタンスにバインドされますinstance.args

于 2012-12-06T14:25:15.607 に答える
4
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
于 2012-12-06T14:23:29.630 に答える
1

KeyErrors の場合、 sys.exc_info()の 2 番目の要素 (インデックス 1) がキーを保持します。

import sys
try:
    x1 = myDict['key1']
    x2 = myDict['key2'] 
except KeyError:
    print 'KeyError, offending key:', sys.exc_info()[1]

出力:

KeyError、問題のキー: 'key2'

于 2012-12-06T14:36:09.543 に答える
0

例外には、不足しているキーに関する情報が含まれています。たとえば、次のように印刷できます。

a={"a":1}
try:
    print(a["b"])
except KeyError as e:
    print(e)        #prints "b"
于 2012-12-06T14:31:56.233 に答える
-13

辞書は実際にはQueryDictであるため、別のエラー メッセージが返されるため、例外メッセージを解析して、単一引用符で囲まれた最初の単語を返す必要があります。

import re
#...
except KeyError as e:
    m = re.search("'([^']*)'", e.message)
    key = m.group(1)
于 2012-12-06T14:55:21.157 に答える