Python-Exception-Propagation
Ich Baue ein tool, wo als Ausnahmen zu propagieren, nach oben, neue Daten über den Kontext der Ausnahme Hinzugefügt wird, die Ausnahme. Das Problem ist, durch die Zeit, die Ausnahme wird auf der obersten Ebene, alle extra-Kontext-Daten gibt es, aber nur die ganz aktuellen stack-trace wird angezeigt. Gibt es eine einfache Möglichkeit zu haben, eine Ausnahme zeigen die ursprünglichen stack-trace, in dem er ausgelöst wurde, anstelle des letzten stack-trace, oder sollte ich so etwas tun schnappen Sie sich den original-stack-trace das erste mal, dass die Ausnahme propagiert?
Beispielsweise den folgenden code:
def a():
return UNBOUND
def b():
try:
a()
except Exception as e:
raise e
b()
ergibt sich die folgende Ausnahme:
Traceback (most recent call last):
File "test.py", line 8, in <module>
b()
File "test.py", line 7, in b
raise e
NameError: global name 'UNBOUND' is not defined
wo, im Idealfall würde ich gerne irgendwie dem Benutzer zeigen dies:
Traceback (most recent call last):
File "test.py", line 8, in <module>
File "test.py", line 2, in a
return UNBOUND
NameError: global name 'UNBOUND' is not defined
So, dass die Punkte, die der Benutzer auf die Zeile, die den Fehler ursprünglich aufgetreten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Python Ausnahmen sind ein bisschen wie java, es ist ein Weg, um die Ursache der Ausnahme erneut ausgelöst, ohne abschneiden des stack.
Verwenden Sie einfach
raise
ohne ein argument. Das Ergebnis:Können Sie ändern, einige Dinge über die
e
Objekt, auch wenn Sie nurraise
ohne, dass die argument - Beispiel:tatsächlich die Ausnahme-Nachricht. Sie können sich wahrscheinlich ändern Sie die anderen Optionen auch diese Weise - ohne dabei den stack.