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 [].
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:
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptableMogelijk gemaakt door
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():
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptableMogelijk gemaakt door
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:
Python geeft een vergelijkbare fout bij door de gebruiker gedefinieerde functies:
defgreet_person(name):print(f"Hello {person}")
greet_person["James"]Mogelijk gemaakt door
Traceback (most recent call last):
...
TypeError: 'function' object is not subscriptableMogelijk gemaakt door
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 eensequence, die je met vierkante haken kunt indexeren:
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:
Traceback (most recent call last):
...
TypeError: 'list' object is not callableMogelijk gemaakt door
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)Mogelijk gemaakt door
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))Mogelijk gemaakt door
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:
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.
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.
In Python is de volgende foutmelding een veelvoorkomende:
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:
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():Haakjes worden gebruikt om een functie in Python aan te roepen. Het gebruik van vierkante haken in plaats van haakjes veroorzaakt echter een fout:
Laten we de foutmelding opsplitsen in de kernonderdelen:
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:De methode
.count()heeft, net als functies in het algemeen, haakjes nodig:Dit lijkt op het voorbeeld in de inleiding, met de lijstmethode
.append(). Hier is de juiste versie met haakjes:TypeError: 'function' object is not subscriptable
Python geeft een vergelijkbare fout bij door de gebruiker gedefinieerde functies:
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:
Tuples en strings zijn andere voorbeelden van sequences. Ze zijn dus ook subscriptable:
Python mappings zijn ook subscriptable. De meest gebruikelijke mapping in Python is de dictionary:
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:
De variabele
numbersis 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:
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():De output bevestigt dat het object een ingebouwde functie of methode is, die aanroepbaar is. Er is ook een ingebouwde functie genaamd
callable()dieTrueretourneert als het argument kan worden aangeroepen:Andere debuggingtips om te overwegen:
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 subscriptablewanneer 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.