Ich habe eine Situation, wo ich eine spezifische Ausnahme Typ bin Fang, die Kontrolle der Botschaft der Ausnahme zu überprüfen, ob es ich fangen wollen tatsächlich eine Ausnahme ist, und dann, wenn die Ausnahme nicht wieder erhöhen:Wie kann ich in Python eine Exception prüfen und dann erneut auslösen, während der ursprüngliche Call-Stack beibehalten wird?
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, mit einem Problem. In dem Fall, in dem ich die Ausnahme erneut erstelle, tritt diese Ausnahme nun bei der Zeile auf, in der ich sie wiedererhöhte (d. H. Bei raise e
) und nicht an dem Ort, an dem die Ausnahme ursprünglich aufgetreten ist. Dies ist nicht ideal für das Debuggen, wo Sie wissen möchten, wo die ursprüngliche Ausnahme aufgetreten ist.
Also meine Frage: gibt es eine Möglichkeit, eine Ausnahme zu re-raisen oder anderweitig "weiterzugeben", nachdem sie abgefangen wurde, während der ursprüngliche Ausnahmeort beibehalten wurde?
HINWEIS: Wenn Sie sich fragen, was die tatsächliche Situation ist: Ich importiere dynamisch einige Module mit __import__
. Ich fange ImportError
, um elegant mit dem Fall umzugehen, dass irgendwelche dieser Module nicht existieren. Falls jedoch eines dieser Module selbst eine Importanweisung enthält, die ImportError
auslöst, möchte ich diese "echten" (aus Sicht meiner Anwendung) Ausnahmen auslösen - und zwar an der ursprünglichen Stelle, soweit es das Debugging betrifft Werkzeuge sind betroffen.
Duh! Einfach. Ich habe mir die Referenz für try/except angeschaut und vergessen, auf raise zu schauen. Vielen Dank. – Ghopper21