0%

Hoofdstuk 10

Fouten, validatie en debuggen

Fouten hebben verschillende vormen

In hoofdstuk 1 maakte je kennis met fouten. Je veroorzaakte bewust een SyntaxError, herstelde een verkeerd gespelde naam en leerde eerst de laatste regel van een foutmelding te lezen.

Nu kun je die ervaringen in drie nuttige categorieën indelen. De categorie vertelt je waar je moet beginnen met zoeken.

1. Python begrijpt de code niet

Een syntaxisfout betekent dat de code de grammatica van Python niet volgt:

if temperature > 20
    print("Warm day")

De ontbrekende dubbele punt voorkomt dat Python het programma start. Python meldt een SyntaxError voordat het bedoelde werk kan plaatsvinden.

Controleer leestekens, inspringing en bij elkaar horende aanhalingstekens en haken rond de gemelde regel. De markering is een aanwijzing, maar de werkelijke fout kan er vlak vóór staan.

2. Python start, maar daarna mislukt een bewerking

Een runtime-exceptie treedt op terwijl Python code met geldige syntaxis uitvoert:

distance = 12
hours = 0
print(distance / hours)

Python begrijpt elke regel, maar delen door nul is geen geldige bewerking. Het programma stopt met een ZeroDivisionError.

Andere excepties die je al bent tegengekomen, zijn:

  • NameError voor een naam die niet is gedefinieerd;

  • ValueError wanneer een waarde niet op de gevraagde manier kan worden omgezet;

  • KeyError wanneer je met haken een ontbrekende sleutel in een dictionary opvraagt.

Een exceptie heeft een type en een bericht. Beide helpen je bij het onderzoek.

3. Het programma werkt, maar geeft het verkeerde resultaat

Soms meldt Python geen exceptie:

price = 8
quantity = 3
total = price + quantity
print(total)

Het programma drukt 11 af, maar een winkeltotaal zou 24 moeten zijn. Dit is een logische fout: geldige Python-code deed iets anders dan de eis voorschreef.

Omdat er geen traceback is, vergelijk je het werkelijke resultaat met een klein resultaat dat je zelf kunt uitrekenen. Bekijk daarna de waarden en bewerkingen die het resultaat opleverden.

Benoem het symptoom voordat je code verandert

Vraag jezelf af:

  1. Weigerde Python de code voordat die werd uitgevoerd?

  2. Stopte het programma met een exceptie?

  3. Eindigde het programma met verkeerd gedrag?

Deze categorieën zeggen niets over hoe ernstig een fout is. Een logische fout van één teken kan kostbaar zijn, terwijl een lange traceback op een snelle oplossing kan wijzen. De categorieën geven je onderzoek simpelweg een bruikbare eerste richting.

Een programma wordt volledig uitgevoerd, maar telt een korting bij de prijs op in plaats van die af te trekken. Wat voor probleem is dit?

Wat gebeurt er wanneer dit programma wordt uitgevoerd?

number = int("twelve")
print(number)