Errors#

IndexError#

def blaat(s):
    print(s[0])
    blaat(s[:1])

blaat("test")
def blaat(s):
    print(s[0])
    blaat(s[1:])

blaat("test")
IndexError: string index out of range

De functie blaat print de eerste letter van een string en roept zichzelf daarna weer. s[1:] geeft aan dat de eerste letter van de string is verwijdert. Als de functie zichzelf vaak genoeg herhaalt zal er uiteindelijk geen letters meer in de string zitten. Als er dan toch gevraagd wordt s[0] te printen geeft python een error. IndexError geeft aan dat je een lokatie binnen een lijst wil lezen dat niet bestaat. De index is te hoog of te laag.

Oplossing is om een base case toe te voegen zodat de functie op tijd stopt. In dit geval willen we stoppen als de string een lengte heeft van 0, met andere woorden, een lege string.

def blaat(s):
    if len(s) == 0:
        return
    print(s[0])
    blaat(s[1:])

blaat("test")
"t"
"e"
"s"
"t"

RecursionError#

def blaat(s):
    print(s)
    blaat(s[1:])

blaat("test")

RecursionError: maximum recursion depth exceeded while calling a Python object

RecursionError geeft aan dat er teveel functies op de stack liggen. Dit kan veroorzaakt worden als een functie te vaak zichzelf aanroept, er is oneindige loop. Vaak ligt het probleem dan in de base case. In dit voorbeeld is er geen base case en kan de functie zichzelf oneindig aanroepen.

Oplossing: Voeg een base case toe. Ook deze functie moet stoppen zodra de string leeg is.

def blaat(s):
    if s  == "":
        return
    print(s)
    blaat(s[1:])

blaat("test")
"test"
"est"
"st"
"t"

TypeError#

def blaat(x, y):
    return x + y
    

blaat("test", 5)

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

De error TypeError krijg je als je een bewerking/berekening wil uitvoeren, maar de datatype ondersteunt de bewerking niet. Python geeft vaak aan wat het probleem is. In dit voorbeeld geeft hij aan dat we enkel strings aan elkaar kunnen plakken (concatenate) en niet een string aan een integer.

Oplossing: Zorg ervoor dat de juiste datatypes wordt gebruikt. In dit voorbeeld moeten we de funtie aanroepen met of twee string of twee integer en niet twee verschillende datatypes.

def blaat(x, y):
    return x + y
 

print(blaat("test", "hanze"))

None#

def blaat(x, y):
    result =  x + y
    

print(blaat("test", "hanze"))

None

None betekent niets, oftewel lege data. Mocht je None tegenkomen als output (komt vaak voor in combo met de TypeError) dan wordt dit vaak veroorzaakt doordat een functie niks returned. In dit voorbeeld wordt het resultaat wel berekent, maar niet teruggegeven door de functie.

Oplossing: return toevoegen zodat het resultaat wordt teruggegeven.

def blaat(x, y):
    result =  x + y
    return result
    

print(blaat("test", "hanze"))

IndentationError#

def blaat(x, y):
    result =  x + y
     return result
    

print(blaat("test", "hanze"))

IndentationError: unexpected indent

Python is heel gevoelig als het gaat om het gebruik van spaties en tabs aan het begin van een regel code. IndentationError geeft aan dat er een regel code uit lood ligt. In ons voorbeeld heeft de regel return result een spatie teveel.

Oplossing: Zorg ervoor dat alle code op de juiste lijn liggen.

def blaat(x, y):
    result =  x + y
    return result
    

print(blaat("test", "hanze"))

None#

def blaat(x, y):
    if x < y :
        z = x + 10
    else :
        z = y + 10
        return z
    

print(blaat(5, 15))

None

De functie heeft een return statement en toch is de ouput None . De functie returns de waarde van z dus niet in dit voorbeeld. Dit wordt veroorzaakt door een indentation probleem. De return statement staat enkel in de else-blok.

Oplossing: De return statement op de juiste lijn plaatsen zodat het buiten de else-blok valt en altijd uitgevoerd wordt aan het einde van de functie.

def blaat(x, y):
    if x < y :
        z = x + 10
    else :
        z = y + 10
    return z
    

print(blaat(5, 15))

Syntax Error#

def blaat(x, y):
    if x < y 
        z = x + 10
    else :
        z = y + 10
    return z
    

print(blaat(5, 15))

SyntaxError: expected ':'

SyntaxError geeft aan dat er een schrijffout in de code staat. In dit voorbeeld misser er dubbele puntjes bij de if statement. Gelukkig geven moderne code editors dit van te voren al aan met rode lijnen om aan te geven dat er iets mist.

Oplossing: Schrijffouten opzoeken en repareren. In dit geval dus de dubbele puntjes op de juiste plaats zetten.

def blaat(x, y):
    if x < y :
        z = x + 10
    else :
        z = y + 10
    return z
    

print(blaat(5, 15))

NameError#

def blaat(x, y):
    result =  a + b
    return result
    

print(blaat("test", "hanze"))

NameError: name 'a' is not defined

NameError geeft aan dat er een variable wordt aangeroepen dat niet bestaat. Computers kunnen slecht omgaan met typefouten en zijn hoofdletter gevoelig als het gaat om namen van functies en variabelen. Of het kan een functie zijn dat niet is gedefineerd, bijvoorbeeld omdat de functie aanroep boven de functie zelf staat.

Moderne code editors geven aan wanneer een gebruikte variabele of functie onbekend is.

Oplossing: De a en b aanpassen naar x en y

def blaat(x, y):
    result =  x + y
    return result
    

print(blaat("test", "hanze"))