Python-fouten & ingebouwde exceptions beheersen
Python-fouten en ingebouwde exceptions
Ontdek hoe Python problemen signaleert, het verschil tussen syntax- en runtime-fouten, en hoe je ingebouwde exceptions met vertrouwen afhandelt.
Video: Python-exception handling
Wanneer je een Python-programma uitvoert, stopt de interpreter direct als er een onafgevangen fout optreedt. Deze fouten vallen in twee brede categorieën:
- Syntax-fouten – problemen gedetecteerd tijdens parsen.
- Logische fouten (exceptions) – problemen die ontstaan tijdens uitvoering van de code.
Python-syntaxfouten
> >>> if a < 3
File "<interactive input>", line 1
if a < 3
^
SyntaxError: invalid syntax
In dit voorbeeld ontbreekt de dubbele punt (:) na de if-statement, wat een SyntaxError triggert.
Python-logische fouten (exceptions)
Logische fouten, of exceptions, duiken pas op nadat de code de syntax-check is gepasse. Veelvoorkomende voorbeelden:
- Delen door nul (
ZeroDivisionError) - Openen van een niet-bestaand bestand (
FileNotFoundError) - Importeren van een onbeschikbare module (
ImportError)
Wanneer een exception wordt gegooid, creëert Python een exception-object. Als het onafgevangen blijft, wordt een traceback geprint met de call stack en de reden van de fout.
> >>> 1 / 0
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero
> >>> open("onbestaand.txt")
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'onbestaand.txt'
Python-ingebouwde exceptions
Python's interpreter gooit een breed scala aan ingebouwde exceptions om verschillende foutcondities te signaleren. Je kunt ze lijsten met:
print(dir(locals()['__builtins__']))
Hieronder een beknopt overzicht van de meest voorkomende ingebouwde exceptions en de situaties die ze triggeren:
| Exception | Oorzaak van fout |
|---|---|
AssertionError | Gegooid wanneer een assert-statement faalt. |
AttributeError | Gegooid bij mislukte attribuuttoewijzing of -referentie. |
EOFError | Gegooid wanneer input() een end-of-file conditie tegenkomt. |
FloatingPointError | Gegooid bij mislukte drijvende-komma operatie. |
GeneratorExit | Gegooid wanneer een generator's close() methode wordt aangeroepen. |
ImportError | Gegooid wanneer geïmporteerde module niet gevonden kan worden. |
IndexError | Gegooid wanneer een sequentie-index buiten bereik is. |
KeyError | Gegooid wanneer een sleutel ontbreekt in een dictionary. |
KeyboardInterrupt | Gegooid wanneer gebruiker Ctrl+C of Delete indrukt. |
MemoryError | Gegooid wanneer een operatie beschikbaar geheugen overschrijdt. |
NameError | Gegooid wanneer een variabele niet in lokale of globale scope gevonden wordt. |
NotImplementedError | Gegooid door abstracte methoden zonder implementatie. |
OSError | Gegooid voor systeemgerelateerde fouten (bijv. bestands-I/O). |
OverflowError | Gegooid wanneer rekenkundig resultaat te groot is om te representeren. |
ReferenceError | Gegooid wanneer een zwakke referentie een garbage-collected object proxeert. |
RuntimeError | Gegooid voor fouten die niet in andere categorieën passen. |
StopIteration | Gegooid door next() wanneer een iterator uitgeput is. |
SyntaxError | Gegooid wanneer de parser ongeldige syntax tegenkomt. |
IndentationError | Gegooid bij incorrecte indentatie. |
TabError | Gegooid wanneer indentatie tabs en spaces inconsistente mengt. |
SystemError | Gegooid wanneer de interpreter een interne fout detecteert. |
SystemExit | Gegooid door sys.exit(). |
TypeError | Gegooid wanneer een operatie of functie een object van ongeschikt type ontvangt. |
UnboundLocalError | Gegooid wanneer een lokale variabele geraadpleegd wordt vóór toewijzing. |
UnicodeError | Gegooid voor Unicode-gerelateerde encoding/decoding fouten. |
UnicodeEncodeError | Gegooid tijdens Unicode-encoding fouten. |
UnicodeDecodeError | Gegooid tijdens Unicode-decoding fouten. |
UnicodeTranslateError | Gegooid tijdens Unicode-vertaling fouten. |
ValueError | Gegooid wanneer een functie een argument van correct type maar ongeschikte waarde ontvangt. |
ZeroDivisionError | Gegooid bij delen of modulo door nul. |
Als je meer granulair controle nodig hebt, staat Python je toe om custom exception-klassen te definiëren. Zie Python User-defined Exceptions voor details.
Exceptions afhandelen is eenvoudig met try, except en finally blokken. Voor een diepere duik, raadpleeg Python try, except and finally statements.
Python
- Python Keywords en Identifiers: Gereserveerde woorden en naamconventies onder de knie krijgen
- Python Statements, Indentatie en Comments: Een duidelijke gids
- Python Variabelen, Constanten en Literals – Een uitgebreide gids
- Python Type Conversie & Casting onder de knie krijgen: Een uitgebreide gids
- Python I/O en Module Imports onder de knie krijgen: Een praktische gids
- Python Global, Local en Nonlocal Variabelen begrijpen
- Python getallen, typeconversie en wiskunde beheersen
- Python-directory en bestandsbewerkingen beheersen
- Python-custom exceptions: een praktische gids
- Huidige datum en tijd ophalen in Python: een praktische gids
- Java throw vs throws: Exception Handling meesteren met praktische voorbeelden