Python Try Except ist eine Möglichkeit sogenannte Ausnahmen (engl.: Exceptions) in Python Programmen zu handhaben, damit die Anwendung nicht abstürzt. Mithilfe von Python Try Except können entstehende Ausnahmen gezielt abgefangen und behandelt werden.
Was ist der Unterschied zwischen Syntax Errors und Exceptions?
Wie wir wahrscheinlich schon alle leidvoll erfahren mussten, beendet Python ein laufendes Programm, sobald ein Fehler oder eine Ausnahme auftritt. Hierbei muss eine wichtige Unterscheidung getroffen werden. Der Code kann zum einen aufgrund von Syntaxfehlern stoppen, also durch schlichtweg falsch geschriebenen Code, der nicht interpretiert werden kann, oder eben durch Ausnahmen, also syntaktisch richtige Codebestandteile, die jedoch während der Ausführung zu Problemen führen.
Einen Syntax Error kann man beispielsweise durch falsch gesetzte Klammern herbeiführen:

Bei Ausnahmen hingegen, handelt es sich um Fehler, die während der Ausführung der Anwendung aufkommen, obwohl der Code syntaktisch richtig ist. Das kann zum Beispiel passieren, wenn man versucht einen String und eine Zahl zusammen zu addieren. Der Code ist an sich richtig geschrieben, aber die Umsetzung dieser Operation ist nicht möglich:

Welche Arten von Exceptions gibt es in Python?
In Python gibt es viele verschiedene Arten von Ausnahmen, die bei der Ausführung von Code auftreten können. Die folgende Aufzählung beschreibt die häufigsten, jedoch nicht alle, Arten von Exceptions:
- AssertionError: Diese Exception tritt auf, wenn der Befehl „assert“ nicht richtig verwendet wurde oder Fehler erzeugt.
- ImportError: Wenn es Probleme beim Import von Modulen gibt, erhält man einen Import Error. Dies kann zum Beispiel passieren, wenn ein Modul, wie Pandas, noch nicht installiert wurde, falsche oder nicht existierende Funktionen aus einem Modul geladen werden sollen oder das Modul mit dem angegebenen Namen schlicht nicht existiert.
- IndexError: Bei der Arbeit mit Python Datenobjekten, die einen Index besitzen, wie beispielsweise Python Tuple oder Python Listen, kann es zu einem IndexError kommen, wenn Indexes benutzt werden, die nicht im Objekt gefunden werden können.
- KeyError: Ähnlich zum IndexError taucht der KeyError bei der Arbeit mit Python Dictionaries auf, wenn ein Schlüssel nicht in einem Dictionary Objekt gefunden werden konnte.
- MemoryError: Wenn der Arbeitsspeicher der Maschine nicht mehr ausreicht, um das Python Programm weiterhin auszuführen, kommt es zu einem MemoryError.
- UnboundLocalError: Wenn man mit lokalen Variablen arbeitet, kann es zu einem UnboundLocalError kommen, sobald man auf eine Variable referenziert, auf die im Vorhinein noch gar nicht definiert wurde, also der noch kein Wert zugeordnet werden konnte.
Wie funktioniert Python Try Except?
Die Python Try Except Funktionalität ermöglicht es, mit möglichen Exceptions gezielt umgehen zu können, indem man eine Routine definiert, die den Umgang mit Ausnahme genauestens beschreibt. Das ist vor allem dann sinnvoll, wenn die Wahrscheinlichkeit für eine Exception sehr hoch ist oder eine Unterbrechung des Programms auf jeden Fall verhindert werden soll.
Dazu verwendet man zwei Blöcke: Try und Except. Im Try-Block wird der Code hinzugefügt, der möglicherweise Exceptions bei der Ausführung hervorrufen kann. Wenn dieser Code-Block ohne Probleme abläuft, wird der nachfolgende Except-Block einfach übersprungen und der Code danach ausgeführt. Im Fall, dass es im Try-Block jedoch zu einer Ausnahme kommt, wird automatisch der Code im Except-Block ausgeführt.

In diesem Fall wird die Addition von a und b immer ausgeführt, außer wenn Werte für die beiden Variablen übergeben werden, die keine Zahl sind. Dann würde es eigentlich einen ValueError geben, der jedoch von unserer Python Try Except Schleife abgefangen wird. Statt dem ValueError wird dann der Text „a, b or both were not numbers. Please try again with different values“ ausgegeben.
Jedoch muss man in einer Python Try Except Schleife nicht unbedingt die konkrete Ausnahme angeben, auf die reagiert werden soll, es kann auch so definiert werden, dass es bei jeglicher Exception den Except-Block ausführt. Außerdem kann mithilfe von „finally“ eine Routine definiert werden, für den Fall, dass das Programm ohne Exception ausgekommen ist.

In welchen Anwendungen ist es sinnvoll Python Try Except zu nutzen?
Im Bereich von Data Science macht es in vielen Anwendungen Sinn, eine Python Try Except Schleife zu nutzen, um das Programm nicht vorzeitig zu beenden:
- Aufbereitung von großen Datensätzen: Wenn man für Machine Learning große Datensätze vorbereiten will, um sie als Trainingsdatensatz zu nutzen, kann die Aufbereitung nicht selten auch mehrere Stunden in Anspruch nehmen. Je nach Qualität des Datensatzes, stimmen nicht alle Datentypen mit den vorgegebenen überein. Gleichzeitig will man jedoch verhindern, dass das Programm nach der Hälfte der Zeit stoppt und man es nicht mitbekommt. Dafür kann kann man eine Python Try Except Schleife nutzen, um einzelne Datensätze, deren Datenqualität nicht stimmt und zu Exceptions führen würden, einfach zu überspringen.
- Logging von Software: Auch hier wird die Python Try Except Schleife benötigt, da die produktive Anwendung weiterhin funktionieren soll. Über den Except Block lässt sich der Fehler in den Logs ausgeben und kann dann ausgewertet werden. Nachdem der Fehler in einer neueren Version behoben wurde, lässt sich der neue Stand deployen und stellt sicher, dass die Downtime der Anwendung so gering wie möglich ist.
Welche Best-Practices gibt es zur Nutzung von Python Try Except?
Hier findest Du einige bewährte Verfahren, die Du bei der Verwendung von try-except-Anweisungen in Python beachten solltest:
- Sei spezifisch mit den except-Anweisungen: Es ist im Allgemeinen am besten, nur die spezifischen Ausnahmetypen abzufangen, deren Auftreten Du erwartest, anstatt alle Ausnahmen mit einer allgemeinen except-Anweisung abzufangen. So kannst Du unerwartete Fehler vermeiden und den Code lesbarer und wartbarer machen.
- Verwende finally für Bereinigungscode: Der finally-Block in einer try-except-Anweisung wird unabhängig davon ausgeführt, ob eine Ausnahme aufgetreten ist oder nicht. Dies macht ihn zu einem guten Platz für Bereinigungscode, wie das Schließen von Dateien oder die Freigabe von Ressourcen, der immer ausgeführt werden sollte.
- Vermeide die Verwendung von try-except für den Kontrollfluss: Try-Except-Anweisungen sollten nicht für den Kontrollfluss in Deinem Code verwendet werden, da dies das Verständnis und die Fehlersuche in Deinem Code erschweren kann. Verwende stattdessen bedingte Anweisungen oder Schleifen, um den Ablauf Deines Codes zu steuern.
- Protokolliere Fehler für die Fehlersuche: Wenn Du Ausnahmen mit try-except abfängst, ist es eine gute Praxis, die Fehlermeldung und andere relevante Informationen für Debugging-Zwecke zu protokollieren. Dies kann helfen zu verstehen, was schief gelaufen ist und wie man das Problem beheben kann.
- Löse Ausnahmen aus, wenn es angebracht ist: Neben dem Abfangen von Ausnahmen kannst Du in Deinem Code auch benutzerdefinierte Ausnahmen mit der Anweisung raise auslösen. Dies kann nützlich sein, um Fehler oder andere außergewöhnliche Bedingungen zu signalisieren, die vom aufrufenden Code behandelt werden sollten.
- Verwende Kontextmanager für die Ressourcenverwaltung: Wenn Du mit Ressourcen wie Dateien arbeitest, ist es oft besser, Kontextmanager wie with-Anweisungen statt try-except-Blöcke zu verwenden, um sicherzustellen, dass die Ressourcen ordnungsgemäß verwaltet und freigegeben werden, wenn sie nicht mehr benötigt werden.
Wenn Du diese Best Practices befolgst, kannst Du Deinen Code robuster und wartbarer machen, wenn Du try-except-Anweisungen in Python verwendest.
Was sind Python Tracebacks und wie hängen sie mit Python Try Except zusammen?
Bei der Programmierung in Python sind Fehler unvermeidlich, aber sie sind nicht unüberwindbar. Exception Tracebacks sind Deine Wegweiser durch das Labyrinth der Fehler und bieten unschätzbare Einblicke in das, was schief gelaufen ist und wo. Bei diesen Rückverfolgungen handelt es sich um detaillierte Berichte, die die Abfolge der Funktionsaufrufe, die zu einer Ausnahme geführt haben, aufzeigen und Dir dabei helfen, den genauen Ort des Fehlers zu bestimmen und den Ausführungsfluss zu verstehen, der zu diesem Fehler geführt hat.
Stellen Dir folgendes Szenario, in dem Du ein potenziell problematisches Codestück in einem try
-Block gekapselt hast und Dich bemühst, potenzielle Ausnahmen zu antizipieren und abzufangen, bevor sie bei der Ausführung Deines Programms Schaden anrichten. Aber trotz Deiner Bemühungen schafft es eine Ausnahme immer noch, durch die Schutzmaßnahmen Deines Codes zu schlüpfen. An dieser Stelle kommt die Rückverfolgung von Ausnahmen ins Spiel.
Wenn eine Ausnahme innerhalb eines try
-Blocks auftritt, hält Python nicht einfach an und lässt Dich verwirrt zurück; es erzeugt einen Traceback, eine strukturierte Auflistung der Aufrufe, die zu der Ausnahme führten. Dieser Traceback enthält detaillierte Informationen wie Dateinamen, Zeilennummern und Funktionsnamen, die wie Brotkrümel angeordnet sind und Dich zum Ursprung des Problems zurückführen. Die letzte Zeile des Tracebacks verweist direkt auf die Codezeile, die die Ausnahme verursacht hat, und dient Dir als Kompass in der Codewildnis.
Durch die Kombination von Python try
except
-Anweisungen mit Exception-Tracebacks verfügst Du über ein dynamisches Duo für die Fehlersuche. Sie ergänzen sich wie folgt: Wenn eine Ausnahme innerhalb eines try
-Blocks auftritt, wird der zugehörige except
-Block ausgelöst, der es Dir ermöglicht, die Ausnahme abzufangen und sie elegant zu behandeln. Während dieses Prozesses wird automatisch der mit der Ausnahme verbundene Traceback erstellt, der den Weg dokumentiert, den der Code genommen hat, um den Fehlerpunkt zu erreichen.
Sobald Du den Traceback in den Händen hälst, kannst Du ihn zu Deinem Vorteil nutzen. Indem Du den spezifischen Ort der Exception lokalisierst, kannst Du die Werte der Variablen untersuchen, den Kontext analysieren und das zugrunde liegende Problem verstehen. So kannst Du die nicht initialisierten Variablen, unerwarteten Werte oder die fehlerhafte Logik aufdecken, die zu der Ausnahme geführt haben.
Mit zunehmender Erfahrung wird die Interpretation von Tracebacks zur zweiten Natur. Du wirst schnell die Ausnahmetypen entschlüsseln, den Spuren der Funktionsaufrufe folgen und die Gründe für die Fehler aufdecken. Mit diesem Verständnis navigierst Du durch das Labyrinth Ihres Codes, nimmst Anpassungen vor und beseitigst systematisch Probleme, bis Dein Code nicht nur läuft, sondern auch anständig läuft.
Letztendlich sind Exception Tracebacks Dein Wegweiser zu einem widerstandsfähigeren Code. Sie versetzen Dich in die Lage, mit Fehlern effektiv umzugehen, und stellen sicher, dass Du auf die unvermeidlichen Unebenheiten in der Programmierung vorbereitet bist, wenn sie auftreten. Indem Du Dir die Macht von Python try
except
zusammen mit den Erkenntnissen aus Tracebacks zunutze machst, verwandelst Du das Debugging von einer entmutigenden Aufgabe in eine aufschlussreiche Reise zur Code-Perfektion.
Das solltest Du mitnehmen
- Python Try Except ist eine Möglichkeit sogenannte Ausnahmen (engl.: Exceptions) in Python Programmen zu handhaben, damit die Anwendung nicht abstürzt.
- Mit dem Try Block werden die Zeilen umschlossen, die potenziell zu Exceptions führen könnten. Im Except Block hingegen wird der Code definiert, der im Fehlerfall ausgeführt werden soll. Wenn es zu keiner Ausnahme kommt, wird einfach der Code nach der Python Try Except Schleife ausgeführt.
- Zusätzlich kann man mit dem Befehl „finally“ definieren, was passieren soll, wenn es im Try Block zu keinem Fehler kommt.
Vielen Dank an Deepnote für das Sponsoring dieses Artikels! Deepnote bietet mir die Möglichkeit, Python-Code einfach und schnell auf dieser Website einzubetten und auch die zugehörigen Notebooks in der Cloud zu hosten.
Andere Beiträge zum Thema Python Try Except
- Bei w3schools findest Du einen ausführlichen Beitrag zu Python Try Except.