Sprint 4 ยท Datastructuren & foutafhandeling  ยท  US2: Exceptions

Als developer, wil ik fouten opvangen op de plek waar ze kunnen ontstaan, zodat mijn programma een duidelijke melding geeft in plaats van te crashen.

Taak 2: Meerdere exceptions tegelijk afvangen

Na T1 nu de volgende stap: niet alles met รฉรฉn except ValueError, maar meerdere exception-types tegelijk afvangen.

Meerdere exceptions tegelijk afvangen

In T1 leerde je exceptions af te vangen. Maar wat als je weet dat meerdere soorten fouten kunnen optreden?

Het probleem: je code kan op verschillende plaatsen fout gaan. KeyError, ValueError โ€” allemaal tegelijk.

config = {"host": "localhost"}
port = config["port"]       # KeyError!
timeout = int("xyz")      # ValueError!

Oplossing 1: Meerdere except-blokken

try:
    port = config["port"]
    timeout_val = int(config["timeout"])
except KeyError:
    print("โŒ Sleutel ontbreekt")
    port = 8080
    timeout_val = 30
except ValueError:
    print("โŒ Waarde is geen getal")
    timeout_val = 30

Oplossing 2: Beide exceptions in รฉรฉn except

try:
    port = config["port"]
    timeout_val = int(config["timeout"])
except (KeyError, ValueError):
    print("โŒ Fout in configuratie")
    port = 8080
    timeout_val = 30

Interactieve demo: twee exception-types, twee reacties

Kies scenario:

Verschil: welke oplossing kiezen?

โŒ Oplossing 2 (beide tegelijk)

Goed als je hetzelfde wilt doen voor alle fouten.

โœ… Oplossing 1 (aparte except)

Beter als je anders reageert per exception-type.

Vuistregel: Aparte except blokken als je anders moet reageren. ร‰รฉn blok met meerdere types als je hetzelfde doet.
>_ Probeer het voorbeeld

Experimenteer: test meerdere except-blokken en groepering.

Klik op de knop om de uitvoer van het voorbeeld te zien.

Opdracht: configuratie veilig laden

Een monitoring-tool leest zijn configuratie uit een dictionary. Niet alle keys bestaan altijd, en waarden kunnen ongeldig zijn. Bestand: config_safe.py

  1. Maak een dictionary server_config met enkele velden (bijv. host, port, timeout).
  2. Probeer minstens twee velden op te halen en te converteren.
  3. Vang KeyError en ValueError af met aparte except-blokken.
  4. Elk fout-type krijgt een ander bericht (wat fout ging).
  5. Zet sensibele defaults in beide gevallen.

Acceptatiecriteria

  • Twee aparte except-blokken: รฉรฉn voor KeyError, รฉรฉn voor ValueError.
  • Elk except-blok print een ander bericht.
  • Defaults worden ingesteld als fout optreedt.
  • Script crasht nooit, ook niet met onvolledige config.
  • Finaal worden de waarden geprint (of defaults).