Ga naar hoofdinhoud

How to Fix builtin_function_or_method' object is not subscriptable

Om de fout "'builtin_function_or_method' object is not subscriptable" op te lossen, zorg je ervoor dat je de functie of methode aanroept met haakjes () in plaats van vierkante haken [].
· 6 min lezen

Verken met AI

In Python is de volgende foutmelding een veelvoorkomende:

'builtin_function_or_method' object is not subscriptable

Python geeft deze fout wanneer een functie of methode gevolgd wordt door de notatie met vierkante haken []. Functies zijn echter aanroepbare objecten. Daarom hebben ze haakjes () nodig, die ook wel ronde haken worden genoemd.

Laten we een voorbeeld bekijken waarin Python deze fout geeft:

numbers = [2, 4, 6, 8]
numbers.append[10]
Traceback (most recent call last):
  ...
TypeError: 'builtin_function_or_method' object is not subscriptable

De volgende sectie gaat dieper in op deze fout.

De fout begrijpen

Python-functies zijn aanroepbare objecten; dat betekent dat we haakjes kunnen gebruiken na de functienaam om de code in de functiedefinitie uit te voeren. Een van de meest voorkomende voorbeelden van een ingebouwde functie in Python is print():

print("This is a built-in function")
This is a built-in function

Haakjes worden gebruikt om een functie in Python aan te roepen. Het gebruik van vierkante haken in plaats van haakjes veroorzaakt echter een fout:

print["This is a built-in function"]
Traceback (most recent call last):
  ...
TypeError: 'builtin_function_or_method' object is not subscriptable

Laten we de foutmelding opsplitsen in de kernonderdelen:

  • Een 'builtin_function_or_method'-object
  • Niet subscriptable

In het bovenstaande voorbeeld is print() een ingebouwde functie. De beschrijving verwijst ook naar methoden, dat zijn functies die deel uitmaken van een klasse. Python heeft veel ingebouwde methoden die horen bij zijn datatypes. Laten we nog een voorbeeld bekijken dat deze foutmelding veroorzaakt:

name = "DataCamp"
print(name.count["a"])
Traceback (most recent call last):
  ...
TypeError: 'builtin_function_or_method' object is not subscriptable

De methode .count() heeft, net als functies in het algemeen, haakjes nodig:

print(name.count("a"))
3

Dit lijkt op het voorbeeld in de inleiding, met de lijstmethode .append(). Hier is de juiste versie met haakjes:

numbers = [2, 4, 6, 8]
numbers.append(10)
print(numbers)
[2, 4, 6, 8, 10]

TypeError: 'function' object is not subscriptable

Python geeft een vergelijkbare fout bij door de gebruiker gedefinieerde functies:

def greet_person(name):
    print(f"Hello {person}")
   
greet_person["James"]
Traceback (most recent call last):
  ...
TypeError: 'function' object is not subscriptable

De functie greet_person() is echter geen ingebouwde Python-functie. De foutmelding geeft aan dat dit een 'function' is en geen 'builtin_function_or_method'.

Het tweede deel van de foutmelding verwijst naar de term 'subscriptable'. Een Python-object is subscriptable als we met vierkante haken een van zijn elementen kunnen benaderen. Een veelvoorkomend voorbeeld van een subscriptable object is een sequence, die je met vierkante haken kunt indexeren:

print(numbers[0])
print(numbers[-1])
print(numbers[1:4])
2
10
[4, 6, 8]

Tuples en strings zijn andere voorbeelden van sequences. Ze zijn dus ook subscriptable:

more_numbers = 10, 30, 50
print(more_numbers[0])
name = "DataCamp"
print(name[0])
10
'D'

Python mappings zijn ook subscriptable. De meest gebruikelijke mapping in Python is de dictionary:

points = {"James": 10, "Mary": 14}
print(points["Mary"])
14

Dictionary-sleutels worden gebruikt in plaats van indexen binnen de vierkante haken.

Python: Callable vs. Subscriptable

Sequences en mappings zijn voorbeelden van subscriptable Python-objecten. We kunnen vierkante haken gebruiken na de objectnaam om een object binnen de datastructuur te benaderen. Een Python-klasse maakt objecten subscriptable als deze de speciale methode .__getitem__() definieert.

Functies en methoden zijn voorbeelden van aanroepbare objecten. We kunnen haakjes gebruiken na de objectnaam om ze aan te roepen. Het aanroepen van een functie of methode voert de code in de functiedefinitie uit.

Klassen zijn een ander aanroepbaar Python-object. Het aanroepen van een klasse maakt een instantie. In het algemeen is een Python-object aanroepbaar als de klasse de speciale methode .__call__() definieert.

Python geeft een vergelijkbare foutmelding wanneer we proberen een object aan te roepen dat niet aanroepbaar is:

numbers = [2, 4, 6, 8]
print(numbers(0))
Traceback (most recent call last):
  ...
TypeError: 'list' object is not callable

De variabele numbers is een lijst en dus niet aanroepbaar. De juiste manier om het eerste item uit de lijst te benaderen is met vierkante haken: numbers[0]. Functies, methoden en klassen zijn de meest voorkomende aanroepbare objecten in Python.

Fix 'builtin_function_or_method' object is not subscriptable`

Python geeft de foutmelding ``'builtin_function_or_method' object is not subscriptable` wanneer een functie of methode gevolgd wordt door vierkante haken. Let op vierkante haken direct na de functie- of methodenaam en vervang deze door haakjes.

In sommige gevallen heeft een functie of methode een lijst als argument, die je definieert met vierkante haken. Let er echter op dat de lijst binnen haakjes staat:

number_of_values = len([10, 30, 50])
print(number_of_values)
numbers = [2, 4, 6, 8]
numbers.extend([10, 12])
print(numbers)
3
[2, 4, 6, 8, 10, 12]

In deze voorbeelden wordt de functie- of methodenaam gevolgd door haakjes. Het argument binnen de haakjes is een lijst. De notatie met vierkante haken om een lijst te definiëren verschilt van de notatie met vierkante haken die je gebruikt bij sequences, mappings en andere subscriptable objecten.

Debuggingtips

Eén ding dat je kunt doen, is het objecttype controleren met de ingebouwde functie type():

print(type(print))
numbers = [2, 4, 6, 8]
print(type(numbers.append))
<class 'builtin_function_or_method'>

De output bevestigt dat het object een ingebouwde functie of methode is, die aanroepbaar is. Er is ook een ingebouwde functie genaamd callable() die True retourneert als het argument kan worden aangeroepen:

print(callable(numbers.append))
True

Andere debuggingtips om te overwegen:

  • Controleer het type haken. Callables, zoals functies en methoden, moeten gevolgd worden door haakjes. Vierkante haken gebruik je voor sequences, mappings en andere subscriptable objecten.
  • Zoek naar aanwijzingen in de foutmelding die verwijzen naar ingebouwde functies of methoden en subscriptable objecten. Het regelnr. in de foutmelding wijst naar de regel met de fout.

Conclusie

Programmeertalen zoals Python gebruiken verschillende tekens voor verschillende doelen. Vierkante haken worden direct na een objectnaam gebruikt om een element uit de datastructuur te benaderen. Deze notatie met vierkante haken werkt op subscriptable objecten. Vierkante haken worden ook gebruikt om lijsten te maken wanneer ze niet direct na een objectnaam staan.

Haakjes worden na een objectnaam gebruikt om het object aan te roepen. Functies en methoden zijn voorbeelden van aanroepbare objecten in Python. Haakjes hangen in Python ook samen met tuples, en ze worden gebruikt om delen van een statement te groeperen wanneer dat nodig is.

Python geeft de uitzondering 'builtin_function_or_method' object is not subscriptable wanneer een ingebouwde functie of methode gevolgd wordt door vierkante haken. De juiste manier om een functie of methode aan te roepen is met haakjes.

Je kunt meer lezen over functies in DataCamp's Python Functions: How to Call & Write Functions.

Stephen Gruppetta

Auteur

Stephen Gruppetta

Ik studeerde natuurkunde en wiskunde op bachelorniveau aan de Universiteit van Malta. Daarna verhuisde ik naar Londen en behaalde ik mijn PhD in natuurkunde aan Imperial College. Ik werkte aan nieuwe optische technieken om het menselijk netvlies in beeld te brengen. Nu richt ik me op schrijven over Python, communiceren over Python en lesgeven in Python.

Onderwerpen