Python Academy · Les

Uitzonderingen genereren en opnieuw genereren

Gebruik raise om fouten te signaleren en genereer uitzonderingen opnieuw voor propagatie.

Les 3 van 414 stappen

Uitzonderingen genereren en opnieuw genereren is een gratis Python Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.

Inleiding

Met het trefwoord raise kun je expliciet fouten signaleren. Opnieuw genereren behoudt de oorspronkelijke context van de fout.

Een ingebouwde uitzondering genereren

raise ValueError('message') genereert onmiddellijk dat uitzonderingstype met het opgegeven bericht.
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)

Dezelfde uitzondering opnieuw genereren

Binnen except genereert raise (zonder argument) de huidige uitzondering opnieuw en behoudt de oorspronkelijke 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')

Uitzonderingen koppelen met from

raise NewError('msg') from original koppelt de uitzonderingen. exc.__cause__ wordt ingesteld.
try:
    int('abc')
except ValueError as original:
    raise RuntimeError('processing failed') from original

Koppelen onderdrukken

raise NewError() from None verbreekt de koppeling — de oorspronkelijke uitzondering wordt in de traceback onderdrukt.
try:
    int('abc')
except ValueError:
    raise RuntimeError('clean error') from None

De assert-instructie

assert condition, 'message' genereert AssertionError als condition False is. Gebruik dit alleen voor invarianten tijdens de ontwikkeling.
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)

Voorwaardelijk een uitzondering genereren

Bewakingsclausules met raise bovenaan een functie maken voorvoorwaarden expliciet en voorkomen diepe nesten.
def process(items):
    if not items:
        raise ValueError('items must not be empty')
    return items[0]
print(process([1, 2, 3]))

Opnieuw genereren versus nieuwe uitzondering

Opnieuw genereren (een lege raise) behoudt de context. Een nieuwe uitzondering verbergt die. Gebruik koppelen om beide zichtbaar te houden.
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__)

Uitzondering in finally

Een uitzondering die in finally wordt gegenereerd, vervangt de oorspronkelijke uitzondering. Vermijd dit tenzij het absoluut noodzakelijk is.
try:
    try:
        raise ValueError('original')
    finally:
        print('finally ran')
except ValueError as e:
    print('caught:', e)

warnings.warn versus raise

Gebruik warn() voor herstelbare, niet-fatale fouten en raise voor fouten die moeten worden afgehandeld. Ze hebben verschillende doelen.
import warnings
def old_func():
    warnings.warn('Deprecated', DeprecationWarning)
    return 42
print(old_func())

Patroon raise from None

Wanneer je bibliotheekuitzonderingen omzet in je eigen API-uitzonderingen, gebruik je from None om te voorkomen dat interne details uitlekken.
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)

Korte controle

Wat doet raise (zonder argument) binnen een except-blok?

Samenvatting

raise Type('msg') signaleert fouten. Een lege raise genereert de huidige uitzondering opnieuw. raise New from Old koppelt uitzonderingen. raise New from None onderdrukt de context. Gebruik assert voor invarianten tijdens de ontwikkeling.

Ga door

Goed gedaan! Ga door naar de volgende les om verder te komen.
Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
76
Lessen
320

Veelgestelde vragen

Is de les “Uitzonderingen genereren en opnieuw genereren” gratis?

Ja — de volledige tekst van “Uitzonderingen genereren en opnieuw genereren” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.

Wat leer ik in “Uitzonderingen genereren en opnieuw genereren”?

Gebruik raise om fouten te signaleren en genereer uitzonderingen opnieuw voor propagatie. Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Python Academy te beginnen?

Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Uitzonderingen genereren en opnieuw genereren”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Python Academy?

Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Uitzonderingen begrijpen
  2. try / except / else / finally
  3. Uitzonderingen genereren en opnieuw genereren
  4. Aangepaste uitzonderingsklassen
← Terug naar Python Academy