Die Schlüssel konnte nicht in Python KeyError?
Wenn ich zu fangen eine KeyError
, wie kann ich erklären, was lookup fehlgeschlagen?
def poijson2xml(location_node, POI_JSON):
try:
man_json = POI_JSON["FastestMan"]
woman_json = POI_JSON["FastestWoman"]
except KeyError:
# How can I tell what key ("FastestMan" or "FastestWoman") caused the error?
LogErrorMessage ("POIJSON2XML", "Can't find mandatory key in JSON")
- Da müssten Sie verzweigen auf den Schlüssel, scheiterte trotzdem, es ist wahrscheinlich übersichtlicher für jedes nachschlagen in einem separaten
try
- Anweisung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehmen Sie die aktuelle Ausnahme (ich habe es
as e
in diesem Fall); dann für eineKeyError
das erste argument ist der Schlüssel, der die Ausnahme ausgelöst hat. Somit können wir tun:Mit, dass Sie die beanstandeten gespeicherten Schlüssel in
cause
.Es sollte angemerkt werden, dass
e.message
funktioniert in Python 2, aber nicht Python 3, also sollte es nicht verwendet werden.BaseException.args
ist dokumentiert, aber nicht in genug detail, dass die Verwendungen sind offensichtlich.Nicht sicher, wenn Sie alle Module, Sie zu unterstützen - wenn die JSON kommt als dict, kann man
dict.get()
hin zu einem nützlichen Ende.dict.get()
nimmt zwei Argumente - das erste ist daskey
Sie wollen, der zweite ist der Wert, der zurückgegeben wird, wenn dieser Schlüssel nicht vorhanden ist.Wenn Sie importieren Sie die
sys
- Modul können Sie get info mit Ausnahmesys.exc_info()
wie diese:
sys.exc_info()
war ein vernünftiger Ansatz.except Foo as e
, und es ist eine race-condition in Multithread-code. Was passiert, wenn zwei threads erhöhen einen KeyError, bevor entweder von Ihnen nennen kannsys.exc_info
? Beide threads würden sehen, dass die gleiche Ausgabe, so einer von Ihnen falsch sein könnte. Dieexcept Foo as e
syntax ist eine Atomare operation.