CodeGym /Java Kurs /Python SELF DE /Ausnahmebehandlung

Ausnahmebehandlung

Python SELF DE
Level 17 , Lektion 2
Verfügbar

3.1 Abfangen von Ausnahmen

Wir würden nicht so viel über Ausnahmen sprechen, wenn wir sie nur beobachten müssten. Ausnahmen sind spezielle Objekte, mit denen dein Python-Programm arbeiten kann. Ausnahmebehandlung ist ein wichtiger Aspekt der Programmierung, der die Zuverlässigkeit und Stabilität von Programmen verbessert.

In Python werden für das Abfangen und Verarbeiten von Ausnahmen Konstrukte wie try, except, else und finally verwendet. Diese Konstrukte erlauben es dir, Fehler abzufangen, die während der Programmausführung auftreten, und entsprechende Maßnahmen zu ergreifen.

Die try-except Konstruktion

Die try-except Konstruktion wird verwendet, um Ausnahmen abzufangen und zu verarbeiten. Der try Block enthält den Code, der eine Ausnahme auslösen kann, und der except Block enthält den Code, der ausgeführt wird, wenn eine Ausnahme auftritt.

Beispiel:


try:
    result = 10 / 0
except ZeroDivisionError:
    print("Fehler: Division durch Null.")

Wenn im Code innerhalb des try Blocks eine ZeroDivisionError Ausnahme auftritt, wird sie vom except Block abgefangen und der Code mit dem Aufruf von print() wird ausgeführt.

Verarbeitung mehrerer Ausnahmen

Du kannst mehrere Ausnahmetypen verarbeiten, indem du sie in separaten except Blöcken angibst.


try:
    result = int("abc")
except ZeroDivisionError:
    print("Fehler: Division durch Null.")
except ValueError:
    print("Fehler: Ungültiger Wert.")

Abfangen aller Ausnahmen

Wenn du alle Ausnahmen abfangen möchtest, kannst du einen except Block ohne Angabe eines bestimmten Ausnahmetyps verwenden. Dies wird jedoch nicht empfohlen, da es die Fehlersuche erschweren und wichtige Fehler verbergen kann.


try:
    result = 10 / 0
except:
    print("Ein Fehler ist aufgetreten.")

3.2 Die else und finally Anweisungen

Neben den Anweisungen try und except gibt es noch zwei optionale: else und finally. Ich erkläre sie jetzt ein bisschen ausführlicher.

Die try-except-else Konstruktion

Der else Block wird verwendet, um Code auszuführen, wenn im try Block keine Ausnahme aufgetreten ist.


try:
    result = 10 / 2
except ZeroDivisionError:
    print("Fehler: Division durch Null.")
else:
    print(f"Ergebnis: {result}")

Die try-except-finally Konstruktion

Der finally Block enthält Code, der immer ausgeführt wird, unabhängig davon, ob eine Ausnahme aufgetreten ist oder nicht. Dies ist nützlich, um Ressourcen freizugeben oder abschließende Operationen durchzuführen.


try:
    result = 10 / 0
except ZeroDivisionError:
    print("Fehler: Division durch Null.")
finally:
    print("Dieser Block wird immer ausgeführt.")

Vollständiges Beispiel: try-except-else-finally

Beispiel:


try:
    result = 10 / 2
except ZeroDivisionError:
    print("Fehler: Division durch Null.")
else:
    print(f"Ergebnis: {result}")
finally:
    print("Dieser Block wird immer ausgeführt.")

3.3 Beispiel try-except-else-finally

Lass uns ein größeres reales Beispiel betrachten. Zum Beispiel versuchen wir, Daten aus einer Datei auf der Festplatte zu lesen — was könnte einfacher sein?


file = open("file.txt", "r")
content = file.read()
print(content)

Was könnte schiefgehen? Zum Beispiel alles:

  • Die Datei könnte fehlen. Sie könnte versehentlich gelöscht oder nicht gespeichert worden sein, oder dein Programm läuft auf einem anderen Computer, wo sie nie vorhanden war.
  • Fehler beim Lesen der Datei. Dein Programm hat keinen Zugriff darauf, weil sie sich in einem Verzeichnis befindet, das Admin-Rechte erfordert.
  • Ein anderes Programm schreibt gerade in diese Datei und sie kann nicht gelesen werden — es hat exklusiven Zugriff auf die Datei.

Nicht genug? Dann vergiss nicht, dass unabhängig davon, an welchem Punkt ein Fehler bei der Arbeit mit der Datei aufgetreten ist, du sie unbedingt „schließen“ musst, damit das Betriebssystem die für die Arbeit mit dieser Datei zugewiesenen Ressourcen freigibt.

Also wird der tatsächliche Code ungefähr so aussehen:


try:
    file = open("non_existent_file.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("Fehler: Datei nicht gefunden.")
except IOError:
    print("Fehler: Ein-/Ausgabefehler.")
else:
    print(content)
finally:
    if 'file' in locals() and not file.closed:
        file.close()
        print("Datei geschlossen.")

Willkommen in der realen Welt, wo du Code nicht nur für „funktionierende Szenarien“ schreiben musst, sondern auch für alle möglichen Szenarien, die schiefgehen können.

Okay, ich will dich nicht abschrecken — es ist einfacher, als es scheint. Du musst nur verstehen, was Grenzbedingungen (corner cases) sind und rechtzeitig die Überprüfung standardmäßiger Fehler hinzufügen. Der Rest wird von modernen Frameworks erledigt.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION