So behebst du den Fehler builtin_function_or_method' object is not subscriptable
Um den Fehler "'builtin_function_or_method' object is not subscriptable" zu beheben, rufe die Funktion oder Methode mit Klammern () statt mit eckigen Klammern [] auf.
In Python taucht häufig folgende Fehlermeldung auf:
'builtin_function_or_method' object is not subscriptableBereitgestellt von
Python wirft diesen Fehler, wenn auf eine Funktion oder Methode direkt eckige Klammern [] folgen. Funktionen sind jedoch aufrufbare Objekte und benötigen deshalb runde Klammern () (auch "Klammern" genannt).
Schauen wir uns ein Beispiel an, in dem Python diesen Fehler ausgibt:
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptableBereitgestellt von
Der nächste Abschnitt beleuchtet diesen Fehler genauer.
Den Fehler verstehen
Python-Funktionen sind aufrufbare Objekte. Das bedeutet, wir können nach dem Funktionsnamen Klammern setzen, um den Code in der Funktionsdefinition auszuführen. Ein bekanntes Beispiel für eine eingebaute Funktion in Python ist print():
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptableBereitgestellt von
Zerlegen wir die Fehlermeldung in ihre Kernaussagen:
Ein Objekt vom Typ 'builtin_function_or_method'
Nicht indizierbar ("not subscriptable")
Im obigen Beispiel ist print() eine eingebaute Funktion. Die Beschreibung erwähnt auch Methoden, also Funktionen, die Teil einer Klasse sind. Python stellt viele eingebaute Methoden für seine Datentypen bereit. Hier ein weiteres Beispiel, das dieselbe Fehlermeldung auslöst:
Einen ähnlichen Fehler wirft Python auch bei selbst definierten Funktionen:
defgreet_person(name):print(f"Hello {person}")
greet_person["James"]Bereitgestellt von
Traceback (most recent call last):
...
TypeError: 'function' object is not subscriptableBereitgestellt von
Allerdings gehört greet_person() nicht zu den eingebauten Funktionen von Python. Deshalb spricht die Fehlermeldung hier von 'function' und nicht von 'builtin_function_or_method'.
Der zweite Teil der Fehlermeldung bezieht sich auf den Begriff "subscriptable". Ein Python-Objekt ist indizierbar, wenn wir mit eckigen Klammern auf eines seiner Elemente zugreifen können. Ein typisches Beispiel für ein indizierbares Objekt ist eineSequenz, die mit eckigen Klammern indiziert wird:
print(numbers[0])print(numbers[-1])print(numbers[1:4])Bereitgestellt von
Bei Dictionaries verwendest du innerhalb der eckigen Klammern Schlüssel statt Indizes.
Python: Callable vs. Subscriptable
Sequenzen und Mappings sind Beispiele für indizierbare (subscriptable) Python-Objekte. Mit eckigen Klammern nach dem Objektnamen greifst du auf ein Element der Datenstruktur zu. Eine Python-Klasse erzeugt indizierbare Objekte, wenn sie die spezielle Methode .__getitem__() definiert.
Funktionen und Methoden sind Beispiele für aufrufbare (callable) Objekte. Mit Klammern nach dem Objektnamen rufst du sie auf. Dadurch wird der Code in der Funktionsdefinition ausgeführt.
Auch Klassen sind aufrufbare Python-Objekte. Das Aufrufen einer Klasse erzeugt eine Instanz. Allgemein gilt: Ein Python-Objekt ist aufrufbar, wenn seine Klasse die Spezialmethode .__call__() definiert.
Python wirft eine ähnliche Fehlermeldung, wenn wir versuchen, ein nicht aufrufbares Objekt aufzurufen:
Traceback (most recent call last):
...
TypeError: 'list' object is not callableBereitgestellt von
Die Variable numbers ist eine Liste und damit nicht aufrufbar. Der richtige Zugriff auf das erste Element erfolgt mit eckigen Klammern: numbers[0]. Funktionen, Methoden und Klassen sind die gängigsten aufrufbaren Objekte in Python.
'builtin_function_or_method' object is not subscriptable beheben
Python gibt die Fehlermeldung 'builtin_function_or_method' object is not subscriptable aus, wenn auf eine Funktion oder Methode eckige Klammern folgen. Achte auf eckige Klammern direkt nach dem Funktions- oder Methodennamen und ersetze sie durch Klammern.
In manchen Fällen übergibst du einer Funktion oder Methode eine Liste als Argument, die mit eckigen Klammern definiert wird. Beachte jedoch, dass die Liste innerhalb der Klammern steht:
number_of_values =len([10,30,50])print(number_of_values)
numbers =[2,4,6,8]
numbers.extend([10,12])print(numbers)Bereitgestellt von
In diesen Beispielen folgen auf den Funktions- oder Methodennamen Klammern. Das Argument innerhalb der Klammern ist eine Liste. Die eckigen Klammern zur Listendefinition unterscheiden sich von den eckigen Klammern, die du bei Sequenzen, Mappings und anderen indizierbaren Objekten für den Zugriff verwendest.
Tipps zum Debuggen
Du kannst zunächst den Objekttyp mit der eingebauten Funktion type() prüfen:
print(type(print))
numbers =[2,4,6,8]print(type(numbers.append))Bereitgestellt von
Die Ausgabe bestätigt, dass es sich um eine eingebaute Funktion oder Methode handelt – also um ein aufrufbares Objekt. Außerdem gibt es die eingebaute Funktion callable(), die True zurückgibt, wenn ihr Argument aufrufbar ist:
Prüfe die Art der Klammern. Aufrufbare Objekte wie Funktionen und Methoden müssen mit Klammern folgen. Eckige Klammern nutzt du für Sequenzen, Mappings und andere indizierbare Objekte.
Achte auf Hinweise in der Fehlermeldung zu eingebauten Funktionen oder Methoden und zu indizierbaren Objekten. Die Zeilennummer in der Meldung zeigt dir, wo der Fehler steckt.
Fazit
Programmiersprachen wie Python verwenden unterschiedliche Zeichen für unterschiedliche Zwecke. Direkt nach einem Objektnamen dienen eckige Klammern dazu, ein Element aus einer Datenstruktur zu lesen. Diese Notation funktioniert bei indizierbaren Objekten. Eckige Klammern werden auch verwendet, um Listen zu erstellen, sofern sie nicht unmittelbar auf einen Objektnamen folgen.
Klammern verwendest du nach einem Objektnamen, um das Objekt aufzurufen. Funktionen und Methoden sind Beispiele für aufrufbare Objekte in Python. Klammern kennzeichnen außerdem Tupel und dienen dazu, Ausdrücke bei Bedarf zu gruppieren.
Python wirft die Ausnahme 'builtin_function_or_method' object is not subscriptable, wenn auf eine eingebaute Funktion oder Methode eckige Klammern folgen. Der richtige Aufruf einer Funktion oder Methode erfolgt mit Klammern.
Ich habe Physik und Mathematik auf UG-Ebene an der Universität Malta studiert. Dann zog ich nach London und machte meinen Doktor in Physik am Imperial College. Ich habe an neuartigen optischen Techniken zur Abbildung der menschlichen Netzhaut gearbeitet. Jetzt konzentriere ich mich darauf, über Python zu schreiben, über Python zu kommunizieren und Python zu unterrichten.
Lerne die Funktionen und Methoden von Python-Listen kennen. Schau dir jetzt die Code-Beispiele für list() und andere Python-Funktionen und -Methoden an!
Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
In Python taucht häufig folgende Fehlermeldung auf:
Python wirft diesen Fehler, wenn auf eine Funktion oder Methode direkt eckige Klammern
[]folgen. Funktionen sind jedoch aufrufbare Objekte und benötigen deshalb runde Klammern()(auch "Klammern" genannt).Schauen wir uns ein Beispiel an, in dem Python diesen Fehler ausgibt:
Der nächste Abschnitt beleuchtet diesen Fehler genauer.
Den Fehler verstehen
Python-Funktionen sind aufrufbare Objekte. Das bedeutet, wir können nach dem Funktionsnamen Klammern setzen, um den Code in der Funktionsdefinition auszuführen. Ein bekanntes Beispiel für eine eingebaute Funktion in Python ist
print():Klammern werden in Python zum Aufrufen einer Funktion verwendet. Verwendest du stattdessen eckige Klammern, führt das zu einem Fehler:
Zerlegen wir die Fehlermeldung in ihre Kernaussagen:
Im obigen Beispiel ist
print()eine eingebaute Funktion. Die Beschreibung erwähnt auch Methoden, also Funktionen, die Teil einer Klasse sind. Python stellt viele eingebaute Methoden für seine Datentypen bereit. Hier ein weiteres Beispiel, das dieselbe Fehlermeldung auslöst:Die Methode
.count()benötigt – wie Funktionen generell – Klammern:Dieses Szenario entspricht dem Beispiel aus der Einleitung mit der Listenmethode
.append(). So sieht die korrekte Version mit Klammern aus:TypeError: 'function' object is not subscriptable
Einen ähnlichen Fehler wirft Python auch bei selbst definierten Funktionen:
Allerdings gehört
greet_person()nicht zu den eingebauten Funktionen von Python. Deshalb spricht die Fehlermeldung hier von 'function' und nicht von 'builtin_function_or_method'.Der zweite Teil der Fehlermeldung bezieht sich auf den Begriff "subscriptable". Ein Python-Objekt ist indizierbar, wenn wir mit eckigen Klammern auf eines seiner Elemente zugreifen können. Ein typisches Beispiel für ein indizierbares Objekt ist eine Sequenz, die mit eckigen Klammern indiziert wird:
Tupel und Strings sind weitere Beispiele für Sequenzen und daher ebenfalls indizierbar:
Python Mappings sind ebenfalls indizierbar. Das gebräuchlichste Mapping in Python ist das Dictionary:
Bei Dictionaries verwendest du innerhalb der eckigen Klammern Schlüssel statt Indizes.
Python: Callable vs. Subscriptable
Sequenzen und Mappings sind Beispiele für indizierbare (subscriptable) Python-Objekte. Mit eckigen Klammern nach dem Objektnamen greifst du auf ein Element der Datenstruktur zu. Eine Python-Klasse erzeugt indizierbare Objekte, wenn sie die spezielle Methode
.__getitem__()definiert.Funktionen und Methoden sind Beispiele für aufrufbare (callable) Objekte. Mit Klammern nach dem Objektnamen rufst du sie auf. Dadurch wird der Code in der Funktionsdefinition ausgeführt.
Auch Klassen sind aufrufbare Python-Objekte. Das Aufrufen einer Klasse erzeugt eine Instanz. Allgemein gilt: Ein Python-Objekt ist aufrufbar, wenn seine Klasse die Spezialmethode
.__call__()definiert.Python wirft eine ähnliche Fehlermeldung, wenn wir versuchen, ein nicht aufrufbares Objekt aufzurufen:
Die Variable
numbersist eine Liste und damit nicht aufrufbar. Der richtige Zugriff auf das erste Element erfolgt mit eckigen Klammern:numbers[0]. Funktionen, Methoden und Klassen sind die gängigsten aufrufbaren Objekte in Python.'builtin_function_or_method' object is not subscriptable beheben
Python gibt die Fehlermeldung
'builtin_function_or_method' object is not subscriptableaus, wenn auf eine Funktion oder Methode eckige Klammern folgen. Achte auf eckige Klammern direkt nach dem Funktions- oder Methodennamen und ersetze sie durch Klammern.In manchen Fällen übergibst du einer Funktion oder Methode eine Liste als Argument, die mit eckigen Klammern definiert wird. Beachte jedoch, dass die Liste innerhalb der Klammern steht:
In diesen Beispielen folgen auf den Funktions- oder Methodennamen Klammern. Das Argument innerhalb der Klammern ist eine Liste. Die eckigen Klammern zur Listendefinition unterscheiden sich von den eckigen Klammern, die du bei Sequenzen, Mappings und anderen indizierbaren Objekten für den Zugriff verwendest.
Tipps zum Debuggen
Du kannst zunächst den Objekttyp mit der eingebauten Funktion
type()prüfen:Die Ausgabe bestätigt, dass es sich um eine eingebaute Funktion oder Methode handelt – also um ein aufrufbares Objekt. Außerdem gibt es die eingebaute Funktion
callable(), dieTruezurückgibt, wenn ihr Argument aufrufbar ist:Weitere Debugging-Tipps:
Fazit
Programmiersprachen wie Python verwenden unterschiedliche Zeichen für unterschiedliche Zwecke. Direkt nach einem Objektnamen dienen eckige Klammern dazu, ein Element aus einer Datenstruktur zu lesen. Diese Notation funktioniert bei indizierbaren Objekten. Eckige Klammern werden auch verwendet, um Listen zu erstellen, sofern sie nicht unmittelbar auf einen Objektnamen folgen.
Klammern verwendest du nach einem Objektnamen, um das Objekt aufzurufen. Funktionen und Methoden sind Beispiele für aufrufbare Objekte in Python. Klammern kennzeichnen außerdem Tupel und dienen dazu, Ausdrücke bei Bedarf zu gruppieren.
Python wirft die Ausnahme
'builtin_function_or_method' object is not subscriptable, wenn auf eine eingebaute Funktion oder Methode eckige Klammern folgen. Der richtige Aufruf einer Funktion oder Methode erfolgt mit Klammern.Mehr zu Funktionen findest du in DataCamps Python Functions: How to Call & Write Functions.