Wenn Sie das Glück haben, nur Python 3.x zu unterstützen, wird dies wirklich zu einer Sache der Schönheit :)
erhöhen von
Wir können die Ausnahmen mit Raise from verketten .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks') from e
In diesem Fall hat die Ausnahme, die Ihr Anrufer abfangen würde, die Zeilennummer des Ortes, an dem wir unsere Ausnahme auslösen.
Traceback (most recent call last):
File "test.py", line 2, in <module>
1 / 0
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "test.py", line 4, in <module>
raise Exception('Smelly socks') from e
Exception: Smelly socks
Beachten Sie, dass die unterste Ausnahme nur den Stacktrace enthält, von dem aus wir unsere Ausnahme ausgelöst haben. Ihr Anrufer kann weiterhin die ursprüngliche Ausnahme erhalten, indem er auf das __cause__
Attribut der Ausnahme zugreift, die er abfängt.
with_traceback
Oder Sie können with_traceback verwenden .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks').with_traceback(e.__traceback__)
Bei Verwendung dieses Formulars hat die Ausnahme, die Ihr Anrufer abfangen würde, den Traceback, von dem der ursprüngliche Fehler aufgetreten ist.
Traceback (most recent call last):
File "test.py", line 2, in <module>
1 / 0
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 4, in <module>
raise Exception('Smelly socks').with_traceback(e.__traceback__)
File "test.py", line 2, in <module>
1 / 0
Exception: Smelly socks
Beachten Sie, dass die unterste Ausnahme die Zeile enthält, in der wir die ungültige Division durchgeführt haben, sowie die Zeile, in der wir die Ausnahme erneut auslösen.