Eintrag

Python Exceptions

Auch in Python lassen sich natürlich Fehler ordentlich abfangen. try / except werden folgendermaßen eingesetzt:

1
2
3
4
try:
    print(5/0)
except ZeroDivisionError:
    print("Teilen durch 0 ist nicht erlaubt")

Sinn und Zweck von try / except erkennst Du, wenn Du die Berechnung innerhalb des print() einfach ohne try/except ausführst.

1
2
3
4
5
try:
    with open ("datei.xyz", "r") as file:
    print(file)
except FileNotFoundError:
    print("Die Datei konnte nicht geöffnet werden.")

mehrere exceptions abfangen

1
2
3
4
5
6
7
8
try:
    print(5/0)
    with open ("datei.xyz", "r") as file:
        print(file)
except FileNotFoundError:
    print("Die Datei konnte nicht geöffnet werden.")
except ZeroDivisionError:
    print("Teilen durch 0 ist nicht erlaubt")

eigene exceptions

Eigene Fehlerklassen lassen sich ebenfalls definieren. Hierbei ist der Klassenname von besonderer Bedeutung – Inhalt muss nicht zwingend vorhanden sein. In dem Fall reicht ein einfaches pass.

1
2
class InvalidEmailError(Exception):
    pass

Testen wir nun eine eigene Fehlerklasse, indem wir einen Fehler provozieren:

1
2
3
4
5
6
7
8
def send_mail(email, subject, content):
    if not "@" in email:
        raise InvalidEmailError("Kein @-Zeichen vorhanden.")
# raise nur bei seltenen (kritischen) Fehlern verwenden
try:
    send_mail("Hallo.email.com", "Betreff", "Inhalt")
except InvalidEmailError:
    print("Bitte gültige Email einfügen")

finally

Um nicht jeden möglichen Fehler abfangen zu müssen, führt finally am Ende die angegebene Anweisung IMMER aus. Im Beispiel wird einfach die Datei geschlossen, die unter try geöffnet wird.

1
2
3
4
5
6
7
8
9
try:
    file = open("../data.txt", "r")
    print(file)
    print(20/x)
except FileNotFoundError:
    print("Datei nicht gefunden!")
finally:
    print("Die Datei wurde geschlossen...")
    file.close()
Dieser Eintrag ist vom Autor unter CC BY 4.0 lizensiert.