Ich bin in eine Situation geraten, in der ich einen bestimmten Ausnahmetyp abfing, die Meldung der Ausnahme überprüfte, um zu überprüfen, ob es sich tatsächlich um die Ausnahme handelte, die ich abfangen wollte, und wenn nicht, die Ausnahme erneut auslöste:
try: # do something exception-prone except FooException as e: if e.message == 'Something I want to handle': # handle the exception else: raise e
Das funktioniert gut, aber es gibt ein Problem. Wenn ich die Ausnahme erneut auslöse, tritt die Ausnahme jetzt an der Zeile auf, an der ich sie erneut ausgelöst habe (d. h. bei raise e
), und nicht an der Stelle, an der die Ausnahme ursprünglich aufgetreten ist. Dies ist für das Debuggen nicht ideal, da Sie wissen möchten, wo die ursprüngliche Ausnahme aufgetreten ist.
Meine Frage lautet also: Gibt es eine Möglichkeit, eine Ausnahme nach dem Abfangen erneut auszulösen oder auf andere Weise zu „übergeben“ und dabei den ursprünglichen Ausnahmeort beizubehalten?
HINWEIS: Wenn Sie sich fragen, was eigentlich los ist: Ich verwende die Importanweisungen von __import__
动态导入一些模块。我正在捕获 importerror
来优雅地处理任何这些模块不存在的情况。但是,如果这些模块本身包含引发 importerror
, wo ich möchte, dass diese „echten“ (aus Sicht meiner Anwendung) Ausnahmen ausgelöst werden – und an der ursprünglichen Stelle des Debuggens, wo die Tools beteiligt sein.
Machen Sie einfach Folgendes:
raise
statt raise e
。请参阅关于引发异常的教程部分,以及raise
. Sehen Sie sich den Tutorial-Abschnitt unter Auslösen einer Ausnahme und raise
-Anweisung
Das obige ist der detaillierte Inhalt vonWie kann ich in Python eine Ausnahme prüfen und dann erneut auslösen, während der ursprüngliche Aufrufstapel beibehalten wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!