So behandeln Sie Ausnahmen in Python (Try-Except-Finally)

Erfahren Sie, wie Sie Ausnahmen in Python mithilfe der Blöcke „try“, „exclusive“, „else“ und „finally“ behandeln. Schreiben Sie fehlerfreien und absturzsicheren Python-Code.

Probieren Sie diese Lösung im Editor aus

Übersicht

Robuste Software muss auf unerwartete Bedingungen wie fehlende Dateien, ungültige Benutzereingaben, Datenbankausfälle oder Netzwerkunterbrechungen vorbereitet sein. Wenn in Python ein Fehler auftritt, wird eine Ausnahme ausgelöst. Wenn sie nicht behandelt werden, stoppen Ausnahmen Ihr Programm sofort und geben einen Traceback-Stack aus.

Das wichtigste Tool von Python zur Verwaltung von Laufzeitfehlern ist der „try-exclusive“-Block. Sie platzieren Code, der einen Fehler auslösen könnte, im „try“-Block und definieren Fehlerbehandlungscode in einem oder mehreren „exclusive“-Blöcken. Die Angabe der genauen Ausnahmeklasse (wie „ValueError“ oder „ZeroDivisionError“) wird dringend empfohlen, da das Abfangen aller generischen Ausnahmen („außer:“) Fehler maskieren kann.

Um Ihren Ausnahmefluss ausdrucksvoller zu gestalten, stellt Python zwei zusätzliche Blöcke bereit: „else“ und „finally“. Der „else“-Block wird nur ausgeführt, wenn im „try“-Block keine Ausnahmen ausgelöst wurden, was für Code nützlich ist, der nur bei Erfolg ausgeführt werden soll. Der „finally“-Block wird *immer* ausgeführt, unabhängig davon, ob eine Ausnahme aufgetreten ist, was ihn zum perfekten Ort für Bereinigungen wie das Schließen von Dateien oder Datenbankverbindungen macht.

Code- und Ausführungsausgabe

Dieses Skript demonstriert eine robuste Fehlerbehandlung in Python mit try, außer, else und final.

def divide_numbers(a, b):
    try:
        # Code that might raise an exception
        result = a / b
    except ZeroDivisionError:
        # Handling a specific exception
        print("Error: Cannot divide by zero!")
    except TypeError:
        # Handling another exception type
        print("Error: Inputs must be numbers!")
    else:
        # Run only if try block succeeded
        print(f"Success! Result of {a}/{b} is {result}")
    finally:
        # Runs no matter what
        print("Division attempt completed.")

divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)
Terminal-Ausgabe
Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.

Schrittweise Umsetzung

  • Platzieren Sie Code, der fehlschlagen könnte, in einem Try-Block.
  • Fangen Sie bestimmte Fehlertypen mit „außer ExceptionType:“-Blöcken ab, um Fehler ordnungsgemäß zu behandeln.
  • Verwenden Sie else für Code, der nur bei erfolgreichen Try-Blöcken ausgeführt werden darf.
  • Nutzen Sie „final“, um sicherzustellen, dass Bereinigungsaktionen unabhängig von Fehlern ausgeführt werden.

Häufig gestellte Fragen

Kann ich mehrere Ausnahmen in einem einzigen Except-Block abfangen?

Ja, Sie können sie als Tupel übergeben: außer (ValueError, TypeError) als e:.

Wie erhebe ich meine eigenen Ausnahmen?

Verwenden Sie das Schlüsselwort raise, gefolgt von der Ausnahmeinstanz: raise ValueError("Ungültiger Konfigurationswert").

Verwandte Themen

Empfohlene Python-Ressourcen

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