Mit try und except kann man in Python Errors abfangen und verarbeiten.

Du weißt nicht was ein Error ist? Dann lies das in diesem Artikel über Errors nach. Begegnet man einem Fehler, stürzt das Programm ab. Das wollen wir natürlich bestmöglich vermeiden, genauer gesagt, wollen wir die Errors abfangen und bestimmte Dinge machen, wenn wir auf einen Error stoßen. Das Ganze nennt sich auch Error Handling.

Wozu Error Handling

Erinnern wir uns nochmal kurz daran was ein Error ist. Ein Error, beziehungsweise eine Fehlermeldung, entsteht dann, wenn etwas im Programm schief läuft und es deswegen abschmiert und nicht funktioniert. Schauen wir uns hier nochmal ein Beispiel an:

print(diese_variable_existiert_nicht)

### Output:
>>> NameError: name 'b' is not defined 

Sobald das Programm auf den Befehl print(b) trifft, wird es sofort beendet und die Fehlermeldung ausgespuckt. Das wollen wir jedoch vermeiden, da jegliche andere Befehle nach diesem Befehl auch nicht mehr ausgeführt werden.

print(diese_variable_existiert_nicht)
print(1+2)
print("Hallo Geld")

### Output:
>>> NameError: name 'b' is not defined 

Hier haben wir beispielsweise einen Code, der nach dem print(b) Befehl noch weitere Befehle enthält. Die Befehle unter dem print(b) werden jedoch niemals ausgeführt, da es beim ersten Befehl wie oben gezeigt bereits zu einem NameError kommt und das Programm abbricht. Doch uns interessiert brennend was bei den anderen beiden anderen Befehlen ausgegeben wird.

Hier kommt nun das sogenannte Error Handling ins Spiel.

try & except

In Python nennt sich das ganze try … except.
Im try Teil schreibt man den Code, den man auf Fehler testen möchte. 
Im except Teil schreibt man rein, was bei welcher Fehlermeldung gemacht werden soll. 

Nehmen wir beispielsweise mal den print(b) Befehl, den wir zuvor besprochen haben.

try:
    print(b)
except:
    print("FEHLER FEHLER FEHLER")
    
### Output:
>>> FEHLER FEHLER FEHLER 

Im try Teil wird hier geschaut, ob es bei der Durchführung des print(b) Befehls zu einem Fehler kommt.

Im except Teil wird der Befehl print(“FEHLER FEHLER FEHLER”) ausgeführt, sollte es im try Teil zu einem Error kommen.

Natürlich kommt bei dem Versuch den print(b) Befehl auszuführen wieder ein Fehler. Dieser Fehler wird diesmal jedoch abgefangen, und statt der NameError Fehlermeldung von oben, kommt stattdessen die gezeigte Ausgabe.

Mehrere Excepts einbinden

Eine Besonderheit beim except Teil ist, dass wir spezifizieren können, welche Fehlermeldung wir genau abfangen möchten. Das können wir folgendermaßen machen:

try:
    print(b)
except KeyError:
    print("Ein KeyError ist aufgetreten!")
except NameError:
    print("Ein NameError ist aufgetreten!")
except:
    print("Ein Fehler ist aufgetreten!") 

Wir fügen einfach hinter dem except Wort den genauen Namen der Fehlermeldung hinzu. Dies können wir für beliebig viele Fehler machen, die wir abfangen wollen.

Quizfrage: Zu welcher Ausgabe wird es im oben genannten Code kommen?

Richtig! Wie oben bereits besprochen handelt es sich ja hier um einen NameError, deshalb:

### Output:
>>> Ein NameError ist aufgetreten! 

Try & Except in der Praxis

Kommen wir nun nochmal zu unserem oberen Problem zurück:

print(b)
print(1+2)
print("Hallo Geld") 

Bauen wir hier mal um den ersten Befehl ein try … except!

try:
    print(b)
except NameError:
    print("Ein NameError ist aufgetreten")
    
print(1+2)
print("Hallo Geld") 

Der Vorteil ist wie bereits erwähnt, dass das Programm nicht aufhört, sondern einfach mit den nächsten Befehlen weiter macht. Hier kommt es zu folgender Ausgabe:

### Output
>>> Ein NameError ist aufgetreten
>>> 3
>>> Hallo Geld 

Try & Except mit Else / Finally

Das war aber noch nicht alles! Zu den 2 Grundbausteinen try und except kommen noch 2 weitere optionale Bausteine.

Zum einen gibt es den else Teil, den man bereits von den if-Bedingungen kennt. Die andere Möglichkeit ist ein finally Teil. Beide Bausteine hängt man hinter den letzten except Teil an.

Try & Except mit Else

Den else Teil verwendet wir dann, wenn wir Befehle ausführen wollen, wenn kein einziger Fehler, von den Fehlern, die wir im except Teil abfangen, auftritt.

Hier ein Beispiel:

try:
    b = 5
    print(b)
except NameError:
    print("Ein NameError ist aufgetreten")
else:
    print("Alles okay, Chef!") 

Hier geben wir b einen Wert, bevor wir es ausgeben, also kann es zu keinem NameError kommen diesmal. Der Befehl print(b) wird ausgeführt und der except Teil wird übersprungen, da kein NameError entstanden ist. Wie oben beschrieben, wird dann der Befehl im else Teil ausgeführt. Es kommt also zur folgenden Ausgabe:

### Output:
>>> 5
>>> Alles okay, Chef! 

Try & Except mit Finally

Den finally Teil verwenden wir, wenn wir Befehle ausführen wollen, unabhängig davon, was im try und except Teil passiert. Dieser Teil wird im Gegensatz zum else Teil immer durchgeführt, egal ob ein Fehler auftritt oder nicht. Ein Beispiel hier:

try:
    print(b)
except NameError:
    print("Ein NameError ist aufgetreten")
else:
    print("Egal was passiert, ich hasse Mathe!") 

Egal was im try und except Teil passiert, der finally Teil wird immer ausgeführt. Da hier b nicht vorher definiert wurde, kommt es wieder zu einem NameError. Wir erhalten dann dementsprechend folgende Ausgabe:

### Output:
>>> Ein NameError ist aufgetreten
>>> Egal was passiert, ich hasse Mathe! 

Try & Except zusammengefasst

Mit try & except können wir Fehler abfangen und sie verarbeiten, bevor sie das System beenden. Mit Else geben wir ein weiteres Feedback aus, wenn kein Fehler auftritt. Mit Finally geben wir etwas aus, unabhängig davon, ob ein Fehler auftritt oder nicht.

Wir werden beim Programmieren auf sehr viele Fehler stoßen, denn diese sind unvermeidlich. Deswegen ist Error Handling eine wichtige Aufgabe, vor allem wenn man sich mit komplexeren Projekten auseinandersetzt. Mit dem try und except können wir super Fehler abfangen und auf diese mit bestimmten Befehlen reagieren.

ARTIKEL TEILEN

Hast du Fragen? Hinterlasse einen Kommentar!