Es gibt ein neues Feature, das in python3 eingeführt wurde - Ausnahmeverkettung. Aus bestimmten Gründen muss ich es für bestimmte Ausnahmen in meinem Code deaktivieren.
Hier ist ein Beispielcode:
%Vor%was ich sehe:
%Vor%Was ich sehen möchte:
%Vor% Ich habe versucht, sys.exc_clear()
zu verwenden, aber diese Methode wurde auch aus python 3 entfernt.
Ich kann eine Workaround verwenden, die funktioniert
aber ich glaube, dass es eine bessere Lösung gibt.
Sie möchten jedoch wahrscheinlich tatsächlich:
%Vor%__cause__
Die implizite Ausnahmekette findet über __context__
statt, wenn keine Ausnahmebedingung für eine explizite Ursache vorhanden ist.
Die explizite Ausnahmekette funktioniert über __cause__
. Wenn Sie also __cause__
auf die Ausnahme selbst setzen, sollte die Verkettung gestoppt werden. Wenn __cause__
gesetzt ist, unterdrückt Python die implizite Nachricht.
Wir können "raise from" verwenden, um dasselbe zu tun:
%Vor%__cause__
Das Festlegen von __cause__
auf None
macht dasselbe:
Das bringt uns zu dem elegantesten Weg dies zu tun, was von None
betrifft:
Aber ich würde argumentieren, dass Sie normalerweise Ihre Ausnahme von der cause-Ausnahme explizit auslösen möchten, damit das Traceback beibehalten wird:
%Vor%Dies wird uns eine etwas andere Nachricht geben, die besagt, dass die erste Ausnahme die direkte Ursache für die zweite war:
%Vor%Tags und Links python exception-handling python-3.x