Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

Python Exception Handling meistern: try, except, else und finally erklärt

Python Exception Handling meistern: try, except, else und finally erklärt

Dieser Leitfaden führt Sie durch Pythons Exception-Handling-Konstrukte mit praktischen Code-Beispielen und Best-Practice-Tipps.

Video: Python Exception Handling (try..except..finally)

Exceptions in Python

Python löst eingebaute Exceptions aus, wann immer ein Laufzeitfehler auftritt. Der Interpreter hält den aktuellen Codeblock an und propagiert die Exception den Call Stack hinauf, bis ein Handler gefunden wird. Existiert kein Handler, terminiert das Programm und gibt einen Traceback aus.

Betrachten Sie die folgende Aufrufkette: A ruft B auf, welches C aufruft. Wenn C eine Exception auslöst, die nicht lokal behandelt wird, blubbert die Exception zu B und dann zu A hoch. Unbehandelte Exceptions führen zu einem abrupten Programmabsturz.

Exceptions in Python abfangen

Um eine Exception abzufangen, platzieren Sie den potenziell unsicheren Code in einen try-Block. Die except-Klausel enthält die Logik, die bei einer Exception ausgeführt wird.

Hier ist ein prägnantes Beispiel, das den Ablauf demonstriert:

# sys-Modul importieren, um Exception-Typ zu inspizieren
import sys
random_list = ['a', 0, 2]
for entry in random_list:
    try:
        print("Der Eintrag ist", entry)
        r = 1 / int(entry)
        break
    except:
        print("Hoppla!", sys.exc_info()[0], "ist aufgetreten.")
        print("Nächster Eintrag.")
print()
print("Der Kehrwert von", entry, "ist", r)

Ausgabe

Der Eintrag ist a Hoppla! <class 'ValueError'> ist aufgetreten. Nächster Eintrag. Der Eintrag ist 0 Hoppla! <class 'ZeroDivisionError'> ist aufgetreten. Nächster Eintrag. Der Eintrag ist 2 Der Kehrwert von 2 ist 0.5

Der Code iteriert über random_list. Wenn die Konvertierung zu int oder die Division fehlschlägt, behandelt der except-Block den Fehler, loggt ihn und geht zum nächsten Element über. Bei erfolgreicher Konvertierung bricht die Schleife ab und der Kehrwert wird ausgegeben.

Da alle eingebauten Exceptions von Exception erben, können Sie sie generisch abfangen:

# sys-Modul importieren, um Exception-Typ zu inspizieren
import sys
random_list = ['a', 0, 2]
for entry in random_list:
    try:
        print("Der Eintrag ist", entry)
        r = 1 / int(entry)
        break
    except Exception as e:
        print("Hoppla!", e.__class__, "ist aufgetreten.")
        print("Nächster Eintrag.")
print()
print("Der Kehrwert von", entry, "ist", r)

Die Ausgabe ist identisch, aber der Handler referenziert nun die spezifische Exception-Klasse über e.__class__.

Spezifische Exceptions in Python abfangen

Das pauschale Abfangen aller Exceptions kann Bugs maskieren und das Debuggen erschweren. Stattdessen listen Sie nur die Exception-Typen auf, die Sie erwarten.

Ein try-Block kann mehrere except-Klauseln enthalten; nur die erste passende Klausel wird ausgeführt. Beispiel:

try:
    # Code, der einen Fehler auslösen kann
    pass
except ValueError:
    # ValueError behandeln
    pass
except (TypeError, ZeroDivisionError):
    # TypeError oder ZeroDivisionError behandeln
    pass
except Exception:
    # Fallback für jede andere Exception
    pass

Exceptions in Python auslösen

Neben automatischen Exceptions können Entwickler Fehler explizit mit der raise-Anweisung auslösen. Optional kann eine Nachricht übergeben werden, um den Grund zu klären.

raise KeyboardInterrupt  # Traceback: KeyboardInterrupt
raise MemoryError("Dies ist ein Argument")  # Traceback: MemoryError: Dies ist ein Argument
try:
    a = int(input("Geben Sie eine positive Ganzzahl ein: "))
    if a <= 0:
        raise ValueError("Das ist keine positive Zahl!")
except ValueError as ve:
    print(ve)

Python try mit else-Klausel

Die optionale else-Klausel läuft nur, wenn der try-Block ohne Exception-Abwurf abgeschlossen wird. Dieses Muster trennt Erfolgs-Pfad-Code von der Fehlerbehandlung.

Beispiel: Kehrwert einer geraden Zahl ausgeben.

# Programm zum Ausgeben des Kehrwerts gerader Zahlen
try:
    num = int(input("Geben Sie eine Zahl ein: "))
    assert num % 2 == 0
except:
    print("Keine gerade Zahl!")
else:
    kehrwert = 1 / num
    print(kehrwert)

Ausgabe bei Eingabe einer ungeraden Zahl:

Geben Sie eine Zahl ein: 1 Keine gerade Zahl!

Ausgabe bei Eingabe einer geraden Zahl:

Geben Sie eine Zahl ein: 4 0.25

Beachten Sie, dass wenn num null ist, ZeroDivisionError im else-Block ausgelöst wird und nicht von der vorangehenden except-Klausel abgefangen wird.

Python try…finally

finally-Klausel garantiert, dass Bereinigungscode unabhängig davon ausgeführt wird, ob eine Exception aufgetreten ist. Dies ist essenziell bei der Arbeit mit externen Ressourcen wie Dateien, Netzwerkverbindungen oder GUIs.

Typische Verwendung bei Datei-Handling:

try:
    f = open("test.txt", encoding='utf-8')
    # Dateioperationen durchführen
finally:
    f.close()

Die Datei wird immer geschlossen, auch wenn während der Verarbeitung ein Fehler auftritt.

Python

  1. Python-Schlüsselwörter & Bezeichner: Reservierte Wörter & Benennungskonventionen meistern
  2. Python-Anweisungen, Einrückung & Kommentare: Klare Anleitung
  3. Python-Variablen, Konstanten & Literale – Umfassender Leitfaden
  4. Python-Typkonvertierung & Casting meistern: Umfassender Leitfaden
  5. Python I/O & Modul-Importe meistern: Praxisleitfaden
  6. Python pass-Statement meistern: Praxisleitfaden
  7. Python Global, Local & Nonlocal Variablen verstehen
  8. Verzeichnis- und Dateioperationen in Python meistern
  9. Python Exception Handling meistern: try, except, else und finally erklärt
  10. Fern-Temperatursensor mit Raspberry Pi & Python bauen – Schritt-für-Schritt-Anleitung