Naar de inhoud
Inloggen

Python-foutmeldingen begrijpen

Python is streng maar eerlijk: als iets niet klopt, zegt hij wat en waar. De melding is in het Engels en ziet er eng uit, maar er zijn maar een handvol soorten. Dit zijn de zeven die je het vaakst ziet.

1. SyntaxError: invalid syntax

De zin klopt niet volgens de regels van Python. Meestal een vergeten dubbele punt na for, if, while of def, of een haakje dat niet dicht is. Kijk naar het regelnummer en het pijltje: de fout zit daar of net ervoor.

2. NameError: name 'voruit' is not defined

Python kent het woord niet. Een spelfout (voruit in plaats van vooruit), een hoofdletter verkeerd, of een variabele die je gebruikt voordat je hem een waarde gaf. Vergelijk letter voor letter met de naam die je bedoelde.

3. IndentationError: expected an indented block

Na een regel met een dubbele punt moet de volgende regel inspringen (vier spaties). Andersom ook: een regel die ineens inspringt terwijl er geen blok open is, geeft "unexpected indent". Lees herhaling voor waarom inspringen betekenis heeft.

4. TypeError: can only concatenate str (not "int") to str

Je plakt een getal aan tekst: "Ik ben " + 10. Maak er tekst van met str(10), of gebruik een f-string: f"Ik ben {leeftijd}". Zie string.

5. IndexError: list index out of range

Je vraagt een plek in een lijst die er niet is. Een lijst van vier heeft plekken 0, 1, 2 en 3; plek 4 bestaat niet. Denk bij het tellen aan het nulpunt.

6. ZeroDivisionError: division by zero

Delen door nul kan niet, ook niet voor Python. Controleer met if aantal > 0: voordat je deelt; dat is een echte randgeval-check, zoals in de tests van ruimtevaart.

7. Het programma stopt nooit

Geen melding, maar wel een fout: een while-lus waarvan de voorwaarde nooit onwaar wordt. In Progio wordt zo'n programma na drie seconden gestopt met uitleg; thuis in Python moet je zelf onderbreken (Ctrl+C). Controleer of er in de lus iets verandert waardoor hij ooit stopt.

Zo lees je een melding

Eerst het regelnummer, dan het soort fout, dan de tekst. Progio vertaalt ze in gewone taal en geeft een suggestie ("Bedoel je vooruit()?"), maar het loont om ook de Engelse namen te herkennen: die kom je overal tegen. Oefen fouten zoeken in de stoomtijd en met Bugjacht; lees ook debugging.

Veelgestelde vragen

Waarom zijn de meldingen in het Engels?

Python is een internationale taal en de meldingen zijn overal hetzelfde. Progio vertaalt ze, zodat kinderen ze leren herkennen zonder erdoor af te schrikken.

Wat betekent "Traceback"?

Het spoor terug: de lijst regels die werden uitgevoerd tot de fout. De laatste regel is meestal de belangrijkste.