0Pricing
Python Academy · Lektion

Ausnahmen auslösen und erneut auslösen

Verwenden Sie raise, um Fehler zu signalisieren, und lösen Sie sie zur Weitergabe erneut aus.

Ausnahmen auslösen und erneut auslösen ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Einführung

Mit dem Schlüsselwort raise können Sie Fehler ausdrücklich signalisieren. Durch erneutes Auslösen bleibt der ursprüngliche Fehlerkontext erhalten.

Integrierte Exception mit raise auslösen

raise ValueError('message') löst sofort eine Exception dieses Typs mit der angegebenen Meldung aus.
def divide(a, b):
    if b == 0:
        raise ValueError('Denominator cannot be zero')
    return a / b
try:
    divide(5, 0)
except ValueError as e:
    print(e)

Dieselbe Exception erneut auslösen

Innerhalb von except löst raise (ohne Argument) die aktuelle Exception erneut aus und bewahrt den ursprünglichen Traceback.
def process(data):
    try:
        return int(data)
    except ValueError:
        print('logging error')
        raise  # re-raises original
try:
    process('abc')
except ValueError:
    print('caller caught it')

Exceptions mit from verketten

raise NewError('msg') from original verkettet die Exceptions. exc.__cause__ wird gesetzt.
try:
    int('abc')
except ValueError as original:
    raise RuntimeError('processing failed') from original

Verkettung unterdrücken

raise NewError() from None unterbricht die Verkettung – die ursprüngliche Exception wird im Traceback unterdrückt.
try:
    int('abc')
except ValueError:
    raise RuntimeError('clean error') from None

Die assert-Anweisung

assert condition, 'message' löst AssertionError aus, wenn condition False ist. Verwenden Sie dies nur für Invarianten während der Entwicklung.
def sqrt(x):
    assert x >= 0, f'Input must be non-negative, got {x}'
    return x ** 0.5
try:
    sqrt(-1)
except AssertionError as e:
    print(e)

Bedingtes Auslösen

Guard-Klauseln mit raise am Anfang einer Funktion machen Vorbedingungen explizit und vermeiden tiefe Verschachtelungen.
def process(items):
    if not items:
        raise ValueError('items must not be empty')
    return items[0]
print(process([1, 2, 3]))

Erneutes Auslösen und neue Exception

Erneutes Auslösen (bare raise) bewahrt den Kontext. Eine neue Exception verbirgt ihn. Verwenden Sie Verkettungen, um beide sichtbar zu halten.
def outer():
    try:
        inner()
    except ValueError as e:
        raise RuntimeError('outer failed') from e
def inner():
    raise ValueError('inner failed')
try:
    outer()
except RuntimeError as e:
    print(e, e.__cause__)

Exception in finally

Eine in finally ausgelöste Exception ersetzt die ursprüngliche Exception. Vermeiden Sie das Auslösen von Exceptions in finally, sofern es nicht unbedingt erforderlich ist.
try:
    try:
        raise ValueError('original')
    finally:
        print('finally ran')
except ValueError as e:
    print('caught:', e)

warnings.warn im Vergleich zu raise

Verwenden Sie warn() für behebbare, nichtkritische Fehler und raise für Fehler, die behandelt werden müssen. Beide dienen unterschiedlichen Zwecken.
import warnings
def old_func():
    warnings.warn('Deprecated', DeprecationWarning)
    return 42
print(old_func())

Muster für raise from None

Wenn Sie Exceptions einer Bibliothek in eigene API-Exceptions umwandeln, verwenden Sie from None, um das Offenlegen interner Details zu vermeiden.
class DBError(Exception): pass
def query(q):
    try:
        raise ConnectionError('refused')
    except ConnectionError:
        raise DBError('query failed') from None
try:
    query('SELECT 1')
except DBError as e:
    print(e)

Schnellüberprüfung

Was bewirkt 'raise' (ohne Argument) innerhalb eines except-Blocks?

Zusammenfassung

raise Type('msg') signalisiert Fehler. Bare raise löst die aktuelle Exception erneut aus. raise New from Old verkettet Exceptions. raise New from None unterdrückt den Kontext. Verwenden Sie assert für Invarianten während der Entwicklung.

Weiter

Sehr gute Arbeit! Fahren Sie mit der nächsten Lektion fort, um weiter voranzukommen.

Häufig gestellte Fragen

Ist die Lektion „Ausnahmen auslösen und erneut auslösen“ kostenlos?

Ja — der vollständige Text von „Ausnahmen auslösen und erneut auslösen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Ausnahmen auslösen und erneut auslösen“?

Verwenden Sie raise, um Fehler zu signalisieren, und lösen Sie sie zur Weitergabe erneut aus. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Ausnahmen auslösen und erneut auslösen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Ausnahmen verstehen
  2. try / except / else / finally
  3. Ausnahmen auslösen und erneut auslösen
  4. Benutzerdefinierte Ausnahmeklassen
← Zurück zu Python Academy