Ausnahmeverkettung und Erneutes Auslösen
Swipe um das Menü anzuzeigen
Beim Behandeln von Fehlern in Python kann es vorkommen, dass das Abfangen einer Ausnahme dazu führt, dass eine andere Ausnahme ausgelöst wird. In solchen Fällen ist es wichtig, den Kontext des ursprünglichen Fehlers zu bewahren. Das Exception Chaining in Python ermöglicht dies mit dem Schlüsselwort from. Durch das explizite Verketten von Ausnahmen erhalten Sie detailliertere Tracebacks, was das Nachvollziehen der Fehlerabfolge erleichtert.
Angenommen, Sie schreiben eine Funktion, die Eingaben aus einer Datei verarbeitet. Tritt beim Lesen der Datei ein Fehler auf, möchten Sie möglicherweise eine benutzerdefinierte Ausnahme auslösen, die besser zur Logik Ihrer Anwendung passt, aber dennoch Informationen über den ursprünglichen Fehler behalten. Mit raise NewException() from original_exception können Sie genau das erreichen.
Das erneute Auslösen von Ausnahmen ist eine verwandte Technik. Manchmal möchten Sie nach dem Abfangen einer Ausnahme zunächst Aufräumarbeiten oder Logging durchführen und dann die Ausnahme weiterreichen. Dies gelingt, indem Sie einfach raise ohne Angabe einer Ausnahme verwenden, wodurch die zuletzt abgefangene Ausnahme erneut ausgelöst wird. Sowohl Exception Chaining als auch das erneute Auslösen von Ausnahmen sind wertvoll für das Schreiben von robustem und gut nachvollziehbarem Code.
12345678910111213141516# Simple exception chaining and re-raising example def divide(a, b): try: return a / b except ZeroDivisionError as err: # Chain a new exception to the original raise ValueError("Cannot divide by zero") from err try: divide(5, 0) except ValueError as e: print("Caught ValueError:") import traceback traceback.print_exc() print("\nRe-raising the exception...\n") raise
Dieser Code zeigt ein einfaches Beispiel für Exception Chaining und das erneute Auslösen von Ausnahmen in Python. Die Funktion divide versucht, zwei Zahlen zu dividieren, fängt dabei eine ZeroDivisionError-Ausnahme ab und verknüpft sie mit einer neuen ValueError-Ausnahme mit einer klaren Fehlermeldung. Der äußere try-except-Block fängt die ValueError-Ausnahme ab, gibt den vollständigen Traceback mit beiden Ausnahmen aus und löst die Ausnahme anschließend erneut aus, um sie weiterzugeben.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen