Python Try/Except und Fehlerbehandlung

Verhindern Sie, dass Ihre Python-Skripte abstürzen. Erfahren Sie, wie Sie Try-Except- und Finally-Blöcke erstellen und wie Sie benutzerdefinierte Ausnahmen richtig auslösen.

Versuchen Sie es im Editor

Übersicht

In der realen Programmierwelt sind Fehler völlig unvermeidbar. Möglicherweise werden Dateien gelöscht, Netzwerkverbindungen werden unterbrochen oder ein Benutzer gibt möglicherweise einen Buchstaben ein, obwohl Ihr Skript eine Zahl erwartet hat. Wenn diese Szenarien ohne Sicherheitsvorkehrungen auftreten, stoppt Python die Ausführung und löst eine Ausnahme (einen Laufzeitfehler) aus, wodurch das gesamte Programm abstürzt. Bei der Fehlerbehandlung handelt es sich um die Kunst, Fehler frühzeitig zu erkennen und zu bewältigen.

Die Grundlage des Fehlermanagements in Python ist die Blockstruktur „try“ und „exclusive“. Sie platzieren den potenziell gefährlichen Code im „try“-Block. Python wird versuchen, es auszuführen. Tritt ein Fehler auf, stürzt Python nicht ab, sondern fängt die Ausnahme ab und springt sofort nach unten, um den im „Exception“-Block enthaltenen Code auszuführen. Dadurch kann das Programm wiederhergestellt werden, eine benutzerfreundliche Fehlermeldung angezeigt und die Ausführung fortgesetzt werden.

Es ist eine wichtige Best Practice, bestimmte, gezielte Ausnahmen abzufangen, anstatt einen pauschalen „Exception:“-Block zu schreiben. Durch das Abfangen von „FileNotFoundError“ oder „ValueError“ wird beispielsweise explizit sichergestellt, dass Sie genau das Problem behandeln, das Sie erwartet haben, anstatt versehentlich nicht zusammenhängende Fehler (wie einen Syntaxfehler) zu maskieren, über die Sie wirklich Bescheid wissen müssen.

Python bietet außerdem einen optionalen „else“-Block, der nur ausgeführt wird, wenn der „try“-Block vollständig erfolgreich abgeschlossen wurde, ohne dass Fehler auftreten. Dies ist der perfekte Ort, um eine Logik zu platzieren, die absolut vom Erfolg der gefährlichen Operation abhängt. Darüber hinaus bietet der „finally“-Block eine Möglichkeit, Code auszuführen, unabhängig davon, was passiert – ob ein Fehler aufgetreten ist oder nicht. Der „finally“-Block ist für Bereinigungsaktionen wie das Schließen von Datenbankverbindungen oder das Aufheben von Dateisperren von entscheidender Bedeutung.

Über das Abfangen von Fehlern hinaus ermöglicht Python Entwicklern, diese mithilfe des Schlüsselworts „raise“ explizit auszulösen. Durch das Auslösen einer Ausnahme können Sie strenge Einschränkungen in Ihrer Logik erzwingen und ungültige Daten ablehnen, bevor sie Ihren Anwendungsstatus beschädigen. Durch die Definition benutzerdefinierter Ausnahmeklassen, die von Pythons Basisklasse „Exception“ erben, können Entwickler hochgradig domänenspezifische Fehlerhierarchien für umfangreiche Unternehmensanwendungen erstellen.

Code- und Ausführungsausgabe

Schaffung struktureller Sicherheit bei der Interaktion mit potenziell gefährlichen oder nicht vorhandenen Dateistrukturen.

def divide_numbers(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        return "Error: Cannot divide by zero!"
    except TypeError:
        return "Error: Both arguments must be numbers."
    else:
        return f"The result is {result}"
    finally:
        print("Execution completed.")

print(divide_numbers(10, 2))
print(divide_numbers(10, 0))
Terminal-Ausgabe
Execution completed.
The result is 5.0
Execution completed.
Error: Cannot divide by zero!

Schrittweise Umsetzung

  • Validierung von Benutzerformulareinsendungen
  • Sicherstellen, dass Netzwerkanfragen bei Zeitüberschreitung nicht abstürzen
  • Sicheres Schließen von Datenbankverbindungen in einem „finally“-Block

Häufig gestellte Fragen

Was ist das Schlüsselwort „raise“?

Das Schlüsselwort raise wird verwendet, um gezielt eine Ausnahme auszulösen. Sie können festlegen, welche Art von Fehler ausgegeben werden soll und welchen Text der Benutzer ausgeben möchte.

Verwandte Themen

Empfohlene Python-Ressourcen

Erweitern Sie Ihr Wissen mit zugehörigen interaktiven Tutorials, Spickzetteln und Codevergleichen.