Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Fehlerbehandlung

1 Fehlertypen

FehlertypBeschreibung
SyntaxErrorFehler in der Code-Syntax
TypeErrorFalscher Typ einer Variablen oder eines Arguments
ValueErrorUngültiger Wert für eine Operation
IndexErrorZugriff auf nicht vorhandenen Index in einer Liste
KeyErrorZugriff auf nicht vorhandenen Schlüssel in einem Dictionary
ZeroDivisionErrorDivision durch Null
FileNotFoundErrorDatei nicht gefunden
ImportErrorModul kann nicht importiert werden

2 Grundlegende Fehlerbehandlung mit try und except

try:
    number = int(input("Enter a number: "))
    print(10 / number)
except ZeroDivisionError:
    print("Error: Division by zero is not allowed.")
except ValueError:
    print("Error: Please enter a valid number.")

3 Mehrere except-Blöcke

try:
    data = {"name": "Alice"}
    print(data["age"])
except KeyError as e:
    print(f"Missing key: {e}")
except Exception as e:
    print(f"General error: {e}")

4 Generischer except-Block (nicht empfohlen)

try:
    # Code that may raise an error
    print(10 / 0)
except Exception as e:
    print(f"An error occurred: {e}")

hinweis

Dies fängt zwar alle Fehler ab, kann jedoch das Debugging deutlich erschweren!

5 else- und finally-Blöcke

try:
    with open("file.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    print("File not found.")
else:
    print("File read successfully.")
finally:
    print("This block always executes.")

6 Eigene Fehler mit raise auslösen

def positive_number(number):
    if number < 0:
        raise ValueError("Number must be positive!")
    return number

try:
    positive_number(-5)
except ValueError as e:
    print(f"Error: {e}")

7 Eigene Fehlerklassen definieren

class CustomError(Exception):
    pass

try:
    raise CustomError("This is a custom error!")
except CustomError as e:
    print(f"Custom error: {e}")

8 Logging statt print verwenden

import logging

logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')

try:
    1 / 0
except ZeroDivisionError as e:
    logging.error(f"An error occurred: {e}")

9 Zusammenfassung

  • try und except dienen der Fehlerbehandlung.
  • Der else-Block wird ausgeführt, wenn kein Fehler auftritt.
  • Der finally-Block wird immer ausgeführt.
  • Mit raise können eigene Fehler erzeugt werden.
  • Eigene Fehlerklassen werden für spezifische Fehler genutzt.
  • Logging ermöglicht eine bessere Fehlerverfolgung.