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

Ich habe eine Situation, in der ich einen bestimmten Ausnahmetyp abfange, die Nachricht der Ausnahme überprüfe, um zu überprüfen, ob es sich tatsächlich um eine Ausnahme handelt, die ich abfangen möchte, und die Ausnahme erneut auslöse, wenn nicht:

try:
    # do something exception-prone
except FooException as e:
    if e.message == 'Something I want to handle':
        # handle the exception
    else:
        raise e

Dies funktioniert gut, mit einem Problem. In dem Fall, dass ich die Ausnahme erneut auslöse, tritt diese Ausnahme nun in der Zeile auf, in der ich sie erneut ausgelöst habe (d. H. Umraise e) statt an der Stelle, an der die Ausnahme ursprünglich aufgetreten ist. Dies ist nicht ideal für das Debuggen, wenn Sie wissen möchten, wo die ursprüngliche Ausnahme aufgetreten ist.

Daher meine Frage: Gibt es eine Möglichkeit, eine Ausnahme erneut auszulösen oder anderweitig "weiterzuleiten", nachdem sie abgefangen wurde, während die ursprüngliche Ausnahmeposition beibehalten wird?

HINWEIS: Falls Sie sich fragen, wie die aktuelle Situation ist: Ich importiere einige Module dynamisch mithilfe von__import__. Ich fangeImportError mit dem Fall, dass eines dieser Module nicht vorhanden ist, angemessen umzugehen. Für den Fall, dass eines dieser Module selbst eine import-Anweisung enthält, die ausgelöst wirdImportErrorIch möchte, dass diese "echten" (aus Sicht meiner Anwendung) Ausnahmen ausgelöst werden - und zwar am ursprünglichen Speicherort, sofern es sich um Debugging-Tools handelt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage