Wie kann ich in Python eine Ausnahme prüfen und dann erneut auslösen, während der ursprüngliche Aufrufstapel beibehalten wird?

WBOY
Freigeben: 2024-02-08 21:42:14
nach vorne
492 Leute haben es durchsucht

在 Python 中,如何在维护原始调用堆栈的同时检查然后重新引发异常?

Frageninhalt

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
Nach dem Login kopieren

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.


Richtige Antwort


Machen Sie einfach Folgendes:

raise
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage