Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Best Practices für die Ausnahmebehandlung | Fehlerbehandlung
Python Fortgeschrittene Konzepte

bookBest Practices für die Ausnahmebehandlung

Das 'as'-Schlüsselwort bei Ausnahmen

Das Schlüsselwort as wird in der Ausnahmebehandlung verwendet, um eine Instanz der Ausnahme zu erfassen. Dies ist nützlich, um detailliertere Informationen über den Fehler zu erhalten und kann insbesondere beim Protokollieren oder bei einer gezielteren Reaktion auf den Fehler hilfreich sein.

1234
try: x = 10 / 0 except ZeroDivisionError as e: print(f"Caught an exception: {e}")
copy

Was ist ein Traceback?

Ein Traceback liefert Details über den tatsächlichen Ausführungspfad eines Programms bis zu dem Punkt, an dem die Ausnahme aufgetreten ist. Er enthält die Funktionsaufrufe im Programm sowie die Zeilennummern in den Code-Dateien, an denen diese Aufrufe erfolgten. Tracebacks sind entscheidend für das Debugging von Fehlern in Entwicklungs- und Produktionsumgebungen.

Traceback (most recent call last):
  File "example.py", line 7, in <module>
    main()
  File "example.py", line 4, in main
    divide_by_zero()
  File "example.py", line 2, in divide_by_zero
    return 1 / 0
ZeroDivisionError: division by zero

Gute Praktiken bei der Ausnahmebehandlung

1. Zu allgemeine Ausnahmen abfangen

# Bad Practice
try:
    process_data(data)
except Exception:
    pass

# Best Practice
try:
    process_data(data)
except SpecificError:
    handle_error()

Das Abfangen zu allgemeiner Ausnahmen kann die eigentliche Fehlerursache verschleiern, was das Debugging erschwert und möglicherweise andere Probleme verdeckt, die eine spezifische Behandlung erfordern. Dadurch wird die Zuverlässigkeit und Wartbarkeit der Software verringert.

2. Ausnahme abfangen und erneut auslösen

Falls eine Operation bei Auftreten einer Ausnahme notwendig ist, die Ausnahme aber weiterhin weitergegeben werden soll.

# Best Practice
try:
    do_something()
except Exception as e:
    log_error(e)
    raise  # Better: Re-raises the current exception

Hinweis

Die Funktionen log_error(e) und print(e) zeigen beide das vollständige Traceback eines Fehlers an, was während der Entwicklung hilfreich sein kann. In einer Produktionsumgebung kann das Anzeigen vollständiger Tracebacks jedoch die Anwendung angreifbar machen, da sie oft sensible Informationen enthalten.

3. Performance von Ausnahmen

Vermeiden Sie den übermäßigen Einsatz von try-except-Blöcken im Code, da deren übermäßige Verwendung das Programm verlangsamen kann. Setzen Sie sie nur ein, wenn sie einen funktionalen Zweck erfüllen. Die Verwendung einer if-Anweisung ist in der Regel schneller und effizienter.

Aufgabe

Swipe to start coding

Überarbeiten Sie das folgende Python-Skript, um das Exception Handling gemäß den besprochenen Best Practices zu verbessern.

def process_data(data):
    try:
        return data[0] / data[-1]
    except:
        print("An error occurred.")

# Example usage
result = process_data([1, 2, 0])
  • Der Code enthält eine Überprüfung, um sicherzustellen, dass die Datenliste nicht leer ist, indem ein ValueError ausgelöst wird.
  • Der überarbeitete Code fängt spezifische Ausnahmen (ZeroDivisionError, TypeError, IndexError) ab, anstatt eine allgemeine except-Klausel zu verwenden.
  • Jeder Ausnahmetyp erhält eine eigene Fehlermeldung, die mehr Kontext darüber gibt, was schiefgelaufen ist.

Lösung

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 5
single

single

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

Can you explain more about how the 'as' keyword works in exception handling?

What information does a traceback provide that helps with debugging?

Can you give more examples of good and bad exception handling practices?

close

bookBest Practices für die Ausnahmebehandlung

Swipe um das Menü anzuzeigen

Das 'as'-Schlüsselwort bei Ausnahmen

Das Schlüsselwort as wird in der Ausnahmebehandlung verwendet, um eine Instanz der Ausnahme zu erfassen. Dies ist nützlich, um detailliertere Informationen über den Fehler zu erhalten und kann insbesondere beim Protokollieren oder bei einer gezielteren Reaktion auf den Fehler hilfreich sein.

1234
try: x = 10 / 0 except ZeroDivisionError as e: print(f"Caught an exception: {e}")
copy

Was ist ein Traceback?

Ein Traceback liefert Details über den tatsächlichen Ausführungspfad eines Programms bis zu dem Punkt, an dem die Ausnahme aufgetreten ist. Er enthält die Funktionsaufrufe im Programm sowie die Zeilennummern in den Code-Dateien, an denen diese Aufrufe erfolgten. Tracebacks sind entscheidend für das Debugging von Fehlern in Entwicklungs- und Produktionsumgebungen.

Traceback (most recent call last):
  File "example.py", line 7, in <module>
    main()
  File "example.py", line 4, in main
    divide_by_zero()
  File "example.py", line 2, in divide_by_zero
    return 1 / 0
ZeroDivisionError: division by zero

Gute Praktiken bei der Ausnahmebehandlung

1. Zu allgemeine Ausnahmen abfangen

# Bad Practice
try:
    process_data(data)
except Exception:
    pass

# Best Practice
try:
    process_data(data)
except SpecificError:
    handle_error()

Das Abfangen zu allgemeiner Ausnahmen kann die eigentliche Fehlerursache verschleiern, was das Debugging erschwert und möglicherweise andere Probleme verdeckt, die eine spezifische Behandlung erfordern. Dadurch wird die Zuverlässigkeit und Wartbarkeit der Software verringert.

2. Ausnahme abfangen und erneut auslösen

Falls eine Operation bei Auftreten einer Ausnahme notwendig ist, die Ausnahme aber weiterhin weitergegeben werden soll.

# Best Practice
try:
    do_something()
except Exception as e:
    log_error(e)
    raise  # Better: Re-raises the current exception

Hinweis

Die Funktionen log_error(e) und print(e) zeigen beide das vollständige Traceback eines Fehlers an, was während der Entwicklung hilfreich sein kann. In einer Produktionsumgebung kann das Anzeigen vollständiger Tracebacks jedoch die Anwendung angreifbar machen, da sie oft sensible Informationen enthalten.

3. Performance von Ausnahmen

Vermeiden Sie den übermäßigen Einsatz von try-except-Blöcken im Code, da deren übermäßige Verwendung das Programm verlangsamen kann. Setzen Sie sie nur ein, wenn sie einen funktionalen Zweck erfüllen. Die Verwendung einer if-Anweisung ist in der Regel schneller und effizienter.

Aufgabe

Swipe to start coding

Überarbeiten Sie das folgende Python-Skript, um das Exception Handling gemäß den besprochenen Best Practices zu verbessern.

def process_data(data):
    try:
        return data[0] / data[-1]
    except:
        print("An error occurred.")

# Example usage
result = process_data([1, 2, 0])
  • Der Code enthält eine Überprüfung, um sicherzustellen, dass die Datenliste nicht leer ist, indem ein ValueError ausgelöst wird.
  • Der überarbeitete Code fängt spezifische Ausnahmen (ZeroDivisionError, TypeError, IndexError) ab, anstatt eine allgemeine except-Klausel zu verwenden.
  • Jeder Ausnahmetyp erhält eine eigene Fehlermeldung, die mehr Kontext darüber gibt, was schiefgelaufen ist.

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 5
single

single

some-alt