Naar hoofdinhoud
Python-basisprincipes2026-07-29 · 9 min leestijd

Python Error Handling: probeer / behalve / else / eindelijk in 2026

Bij foutafhandeling wordt een onderscheid gemaakt tussen 'code die op uw machine werkt' en 'code die de productie overleeft'. Python's try/except ziet er eenvoudig uit, maar de volledige vorm van vier trefwoorden — try/except/else/final — codeert voor een verrassende hoeveelheid structuur die de meeste tutorials overslaan.

Deze gids behandelt: wat elk trefwoord eigenlijk betekent, de zes patronen die u in elke backend-codebase zult zien, wanneer u uw eigen uitzonderingen moet definiëren, en de drie antipatronen die ervoor zorgen dat bugs aan uw tests voorbijglippen.

De vier trefwoorden, precies

▶ PYTHONeditable · runs in your browser

De 'else'-clausule wordt te weinig gebruikt. Er staat: "Dit volgende stukje hangt af van de succesvolle poging, maar ik wil niet dat het door dezelfde wordt beschermd, behalve". Het is de juiste plaats voor de happy path continuation — als je het in try plaatst, worden per ongeluk niet-gerelateerde uitzonderingen uit ship(result) onderschept.

De zes patronen

1. Probeer het opnieuw bij een tijdelijke fout

▶ PYTHONeditable · runs in your browser

Regel: ALLEEN opnieuw proberen bij tijdelijke fouten (netwerk, time-out, 429, 503). Probeer nooit opnieuw ValueError, KeyError, TypeError — dat zijn codefouten, en als u het opnieuw probeert, wordt de fout slechts drie keer uitgevoerd.

2. Bewaak met anders

▶ PYTHONeditable · runs in your browser

De else garandeert dat bestand succesvol is geopend EN dat de scope wordt opgeschoond met with. Let op: process() kan ValueError oproepen — dat zal zich voortplanten en NIET worden opgevangen door behalve FileNotFoundError.

3. Opschonen met eindelijk (voordat with bestond)

▶ PYTHONeditable · runs in your browser

In moderne code zou je with db.connect() gebruiken als conn: — with is de suiker boven try / eindelijk voor het gebruikelijke opruimgeval. Reik alleen naar expliciet 'eindelijk' als de bron het contextmanagerprotocol niet ondersteunt.

4. Re-raise met toegevoegde context

▶ PYTHONeditable · runs in your browser

raise NewException(...) from e koppelt de oorspronkelijke uitzondering aan de nieuwe, zodat de traceback BEIDE toont. Schrijf nooit raise NewException(str(e)) — dat verwijdert de originele traceback.

5. Vang de kleinste uitzondering die je kunt

▶ PYTHONeditable · runs in your browser

Regel: hoe smaller de uitzondering, hoe beter. Als je niet weet wat 'proces' kan opleveren, voer het dan uit en ontdek het. behalve Exception: is 90% van de tijd een codegeur.

6. raise binnen behalve — re-raise netjes

▶ PYTHONeditable · runs in your browser

Door de kale ‘raise’ blijft de originele traceback intact. Nooit 'raise e' (Python 3 is er slim in, maar 'raise' is de idiomatische vorm).

Aangepaste uitzonderingen — als het de moeite waard is

Definieer uw eigen uitzonderingsklasse wanneer:

1. Bellers moeten specifiek 'Behalve MyError:' gebruiken (dat wil zeggen, u heeft een aanroepbare API en gebruikers moeten vertakken op fouttype).

2. Uw bibliotheek/service geeft aanleiding tot meerdere gerelateerde fouten die dezelfde context hebben.

▶ PYTHONeditable · runs in your browser

Bellers kunnen nu breed (behalve PaymentError) of nauw (behalve CardDeclinedError) ontvangen. Gestructureerde attributen op de uitzondering (e.card_last4) zorgen ervoor dat foutafhandelaars nuttige UX kunnen bouwen zonder uitzonderingsberichten te parseren.

Anti-patroon: definieert een aangepaste uitzondering die slechts één keer kan worden gegenereerd en nooit kan worden opgevangen. Dat is gewoon raise ValueError("..."). Aangepaste uitzonderingen verdienen hun gewicht doordat ze betrapt worden.

Drie antipatronen die bugs verbergen

Antipatroon 1: Kaal behalve

▶ PYTHONeditable · runs in your browser

Bare except vangt signalen op die het programma zouden moeten afsluiten (Ctrl-C, sys.exit, MemoryError). Schrijf dit nooit. Als je echt elke niet-fatale uitzondering wilt onderscheppen, gebruik dan except Exception: — die NOG STEEDS te veel opvangt, maar in ieder geval Ctrl-C respecteert.

Antipatroon 2: Stilzetten zonder inloggen

▶ PYTHONeditable · runs in your browser

Elke gevangen uitzondering moet worden afgehandeld (met een specifieke fallback) of worden vastgelegd. pass in anexcept is een bug in slow motion - de code lijkt te werken terwijl gegevens stilletjes worden weggegooid.

▶ PYTHONeditable · runs in your browser

Antipatroon 3: behalve Uitzondering: rond alles

▶ PYTHONeditable · runs in your browser

Probleem: als stripe.charge slaagde maar send_receipt mislukte, werden er kosten aan de klant in rekening gebracht EN heeft u de fout ingeslikt. Het 'behalve' omvat vier verschillende foutmodi, en je kunt ze niet van elkaar onderscheiden.

Opgelost: verklein de try-scope + vertak de uitzonderingen op modulegrens.

▶ PYTHONeditable · runs in your browser

Elke poging omvat EEN operatie. Iedereen behalve weet wat te doen aan DEZE specifieke storing. Dat is foutafhandeling op productieniveau.


Goede foutafhandeling is meer ontwerp dan syntaxis. proberen / behalve / anders / eindelijk geeft je de tools; de discipline is het juiste type kiezen, de kleinst mogelijke reikwijdte van de poging, en nooit fouten uitsluiten die je niet begrijpt.

Volgende stap: de Foundations track bevat 10 lessen over het omgaan met uitzonderingen, aangepaste uitzonderingen en de with-instructie — waarbij echte Python in uw browser wordt uitgevoerd.

Klaar om het te proberen?

15 lessen gratis na een gratis aanmelding — geen kaart. Proef het platform en beslis dan.

Begin gratis →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.