Übersetzung ins Deutsche

Python - Ausnahmebehandlung

Hallo dort,ambitionierte Pythonistas! Heute tauchen wir in die aufregende Welt der Ausnahmebehandlung in Python ein. Keine Sorge, wenn du neu bei der Programmierung bist – ich werde dich Schritt für Schritt durch dieses Konzept führen, genau wie ich es für unzählige Studenten in meinen Jahren des Unterrichtens getan habe. Also, nimm dir eine Tasse deiner Lieblingsgetränk und lass uns gemeinsam auf diese Python-Abenteuerreise aufbrechen!

Python - Raising Exceptions

Ausnahmebehandlung in Python

Stell dir vor, du bereitest ein köstliches Essen vor, aber plötzlich realizierst du, dass du eine entscheidende Zutat nicht mehr hast. Was würdest du tun? Du würdest wohl das Kochen stoppen und alle über das Problem informieren, oder? Genau das ist die Ausnahmebehandlung in Python auch – es ist eine Möglichkeit, anzuzeigen, dass etwas Unerwartetes oder Problematisches in deinem Code aufgetreten ist.

Warum Ausnahmen erheben?

Das Erheben von Ausnahmen ermöglicht uns, Folgendes zu tun:

  1. Fehler oder ungewöhnliche Situationen anzuzeigen
  2. Den Ablauf unseres Programms zu steuern
  3. Bedeutungsvolle Rückmeldung an Benutzer oder andere Teile unseres Codes zu geben

Lass uns mit einem einfachen Beispiel beginnen:

def teile(a, b):
    if b == 0:
        raise ValueError("Kann nicht durch null teilen!")
    return a / b

try:
    ergebnis = teile(10, 0)
except ValueError as e:
    print(f"Ouch! Ein Fehler ist aufgetreten: {e}")

In diesem Beispiel erheben wir eine ValueError, wenn jemand versucht, durch null zu teilen. Lass uns das aufbrechen:

  1. Wir definieren eine Funktion teile(a, b), die überprüft, ob b null ist.
  2. Wenn b null ist, erheben wir eine ValueError mit einer benutzerdefinierten Meldung.
  3. Wir verwenden einen try-except-Block, um die Ausnahme abzufangen und eine freundliche Meldung auszugeben.

Wenn du diesen Code ausführst, wirst du sehen:

Ouch! Ein Fehler ist aufgetreten: Kann nicht durch null teilen!

Erheben von eingebauten Ausnahmen

Python kommt mit einer Vielzahl eingebauter Ausnahmen, die wir erheben können. Hier ist eine Tabelle einiger gängiger Ausnahmen:

Ausnahme Beschreibung
ValueError Erhoben, wenn eine Funktion ein Argument vom richtigen Typ, aber einem unangemessenen Wert erhält
TypeError Erhoben, wenn eine Operation oder Funktion auf ein Objekt eines unangemessenen Typs angewendet wird
IndexError Erhoben, wenn ein Sequenz-Subskript außerhalb des Bereichs liegt
KeyError Erhoben, wenn ein Dictionary-Schlüssel nicht gefunden wird
FileNotFoundError Erhoben, wenn eine Datei oder ein Verzeichnis angefordert wird, aber nicht existiert

Lass uns einige Beispiele sehen:

def überprüfe_alter(alter):
    if not isinstance(alter, int):
        raise TypeError("Das Alter muss eine ganze Zahl sein")
    if alter < 0:
        raise ValueError("Das Alter kann nicht negativ sein")
    print(f"Dein Alter ist {alter}")

try:
    überprüfe_alter("zwanzig")
except TypeError as e:
    print(f"Typ-Fehler: {e}")

try:
    überprüfe_alter(-5)
except ValueError as e:
    print(f"Wert-Fehler: {e}")

Wenn du diesen Code ausführst, wirst du sehen:

Typ-Fehler: Das Alter muss eine ganze Zahl sein
Wert-Fehler: Das Alter kann nicht negativ sein

Erheben von benutzerdefinierten Ausnahmen

Manchmal reichen die eingebauten Ausnahmen einfach nicht. Das ist, wenn wir unsere eigenen benutzerdefinierten Ausnahmen erstellen! Es ist wie ein Chef, der seine eigenen einzigartigen Rezepte kreiert.

Erstellen von benutzerdefinierten Ausnahmen

Um eine benutzerdefinierte Ausnahme zu erstellen, definieren wir einfach eine neue Klasse, die von der Exception-Klasse erbt:

class ZuVielePizzenFehler(Exception):
    pass

def pizze_bestellen(anzahl):
    if anzahl > 100:
        raise ZuVielePizzenFehler("Whoa! Das sind zu viele Pizzen, um sie zu bewältigen!")
    print(f"Bestellung bestätigt: {anzahl} Pizzen")

try:
    pizze_bestellen(101)
except ZuVielePizzenFehler as e:
    print(f"Bestellung fehlgeschlagen: {e}")

In diesem köstlichen Beispiel:

  1. Wir definieren eine benutzerdefinierte Ausnahme ZuVielePizzenFehler.
  2. Unsere pizze_bestellen-Funktion erhebt diese Ausnahme, wenn jemand mehr als 100 Pizzen bestellt.
  3. Wir fangen die Ausnahme ab und geben eine freundliche Meldung aus.

Wenn du diesen Code ausführst, wirst du sehen:

Bestellung fehlgeschlagen: Whoa! Das sind zu viele Pizzen, um sie zu bewältigen!

Wiedererheben von Ausnahmen

Manchmal möchtest du vielleicht eine Ausnahme fangen, etwas damit tun und sie dann wieder erheben, damit jemand anderes sie behandelt. Es ist wie das Übergabspiel eines heißen Kartoffels in einem Spiel!

So kannst du es tun:

def riskante_operation():
    print("Starte riskante Operation...")
    raise ValueError("Etwas ist schiefgelaufen!")

def durchführe_operation():
    try:
        riskante_operation()
    except ValueError:
        print("Fehler gefangen, protokolliere...")
        raise  # Wiedererhebe die Ausnahme

try:
    durchführe_operation()
except ValueError as e:
    print(f"Operation fehlgeschlagen: {e}")

In diesem Beispiel:

  1. riskante_operation() erhebt immer eine ValueError.
  2. durchführe_operation() fängt die Ausnahme ab, protokolliert sie und erhebt sie dann wieder.
  3. Wir fangen die wiedererhobene Ausnahme im äußeren try-except-Block ab.

Wenn du diesen Code ausführst, wirst du sehen:

Starte riskante Operation...
Fehler gefangen, protokolliere...
Operation fehlgeschlagen: Etwas ist schiefgelaufen!

Und das ist es, Leute! Wir haben das Erheben von Ausnahmen, eingebaute Ausnahmen, benutzerdefinierte Ausnahmen und sogar das Wiedererheben von Ausnahmen abgedeckt. Denke daran, Ausnahmen sind nicht deine Feinde – sie sind wertvolle Werkzeuge, die dir helfen, robuste und fehlerresistente Code zu schreiben.

Wie ich meinen Studenten immer sage, Programmierung ist wie das Lernen, ein Fahrrad zu fahren. Du könntest ein paar Mal fallen, aber jeder Sturz (oder Ausnahme) lehrt dich etwas Neues. Übe weiter, bleib neugierig und habe keine Angst, einige Ausnahmen unterwegs zu erheben!

Happy coding, und möge dein Ausnahmen immer intendiert sein! ?✨

Credits: Image by storyset