Fehler listenobjekt in Python nicht aufrufbar behoben
Typfehler sind einige der häufigsten Standardausnahmen in Python-Programmen. Sie resultieren häufig aus der Nichteinhaltung der korrekten Syntax oder einer Operation mit einem nicht unterstützten Datentyp.
Dieser Fehler tritt häufig auf, wenn versucht wird, ein nicht aufrufbares Objekt so aufzurufen, wie wir es mit einem normalen Funktionsobjekt tun würden. Das folgende Code-Snippet gibt einen TypeError aufgrund der Verletzung der korrekten Python-Syntax zurück.
nums = [23, 34, 56, 67]
nums()
Ausgabe:
Traceback (most recent call last):
File "<string>", line 2, in <module>
TypeError: 'list' object is not callable
Ein Objekt gilt als aufrufbar, wenn ein abschließendes Klammerpaar seine Ausführung auslösen kann, wie bei Funktionen.
Glücklicherweise bietet der Python-Standard auch die Funktion callable()
, die True
zurückgibt, wenn ein Objekt aufrufbar erscheint, und False
, wenn ein Objekt nicht aufrufbar ist.
Im Beispiel über der Liste ist das Objekt nicht aufrufbar, und daher würden wir sicherlich ein False erhalten.
nums = [23, 34, 56, 67]
print(callable(nums))
Ausgabe:
False
Funktionen, Methoden und Klassen sind Callables in Python.
Dies liegt daran, dass ihre Ausführung mit dem Ausführungsoperator aufgerufen werden kann. Die Liste der aufrufbaren Objekte in Python umfasst Lambda-Funktionen und benutzerdefinierte aufrufbare Objekte.
Datentypen wie Tupel, Listen und Wörterbücher sind dagegen nicht aufrufbar. Daher würde jeder Versuch, sie als normale Funktionen oder Methoden in Python auszuführen, zu einem TypeError: object is not callable
führen.
Der nicht aufrufbare TypeError list
-Objekt kann auch bei der Indexierung von Elementen aus Listen mit runden statt eckigen Klammern auftreten.
In den meisten Programmiersprachen gelten eckige Klammern als Standard-Indizierungsoperatoren. Beim Schreiben von Programmen werden wir jedoch oft feststellen, dass wir aufgrund ihrer großen Ähnlichkeit runde Klammern anstelle von eckigen Klammern verwenden.
Das folgende Code-Snippet soll das Element an Index zwei in der Liste zurückgeben.
cars = ["Mazda", "Toyota", "BMW", "Tesla", "Hyundai"]
print(cars(2))
Ausgabe:
Traceback (most recent call last):
File "<string>", line 2, in <module>
TypeError: 'list' object is not callable
Obwohl Anfänger diesen Fehler oft machen, ist es auch ein häufiger syntaktischer Fehler, der sogar von erfahrenen Entwicklern begangen wird. Dieser Fehler kann behoben werden, indem einfach eckige Klammern anstelle von runden Klammern verwendet werden, um Elemente zu indizieren, wie unten gezeigt.
cars = ["Mazda", "Toyota", "BMW", "Tesla", "Hyundai"]
print(cars[2])
Ausgabe:
BMW
Die Verwendung von Klammern zur Indizierung anstelle von eckigen Klammern tritt wahrscheinlich auf, wenn das Listenverständnis verwendet wird, um die Python-Syntax zu verkürzen. Dies liegt daran, dass Listenverständnisse im Gegensatz zur üblichen Python-Syntax eine Kombination aus mehreren eckigen Klammern und runden Klammern beinhalten.
Im folgenden Beispiel wurden Klammern beim Erstellen des Listenverständnisses missbraucht.
top_companies = [
["microsoft", "apple", "ibm"],
["tesla", "lucid", "nikola"],
["foxcon", "huawei", "tencent"],
]
result = [[row(index).upper() for index in range(len(row))] for row in top_companies]
print(result)
Ausgabe:
Traceback (most recent call last):
File "<string>", line 2, in <module>
File "<string>", line 2, in <listcomp>
File "<string>", line 2, in <listcomp>
TypeError: 'list' object is not callable
Das obige Beispiel beabsichtigt, die verschachtelten Listen unter Verwendung der Indizes der Elemente zu durchlaufen und seine Elemente in Großbuchstaben umzuwandeln. Um den Fehler zu beheben, müssen wir den Code untersuchen und sicherstellen, dass wir eckige Klammern zum Indexieren verwenden, wie unten gezeigt.
top_companies = [
["microsoft", "apple", "ibm"],
["tesla", "lucid", "nikola"],
["foxcon", "huawei", "tencent"],
]
result = [[row[index].upper() for index in range(len(row))] for row in top_companies]
print(result)
Ausgabe:
[['MICROSOFT', 'APPLE', 'IBM'], ['TESLA', 'LUCID', 'NIKOLA'], ['FOXCON', 'HUAWEI', 'TENCENT']]
TypeError: list object is not callable
kann auch auftreten, wenn ein vordefinierter Name zum Benennen einer Variablen verwendet wird. Zu den am häufigsten missbrauchten eingebauten Namen, die einen solchen Fehler hervorrufen könnten, gehören: str
, dict
, list
und range
.
In Python wird der Listenkonstruktor list()
verwendet, um neue Listen zu erstellen. Da dies ein vordefinierter eingebauter Name und ein Klassenobjekt ist, das eine Python-Liste darstellt, ist es nicht gut, die Namensliste als Variablennamen zu verwenden.
Die Verwendung der Namensliste zur Namensvariablen könnte zu dem Fehler list object is not callable
führen, wie im folgenden Beispiel gezeigt.
list = [24, 24, 25, 26, 28, 56]
nums_range = list(range(20, 40))
for number in list:
if number in nums_range:
print(number, "is the range")
else:
print(number, "number is not in range")
Ausgabe:
Traceback (most recent call last):
File "<string>", line 3, in <module>
TypeError: 'list' object is not callable
Im obigen Beispiel haben wir die vordefinierte Namensliste als Variablennamen verwendet. Wir versuchen, denselben Namen als Konstruktor zu verwenden, um eine neue Liste in der zweiten Zeile zu erstellen.
Da wir diesen Namen bereits als Variablennamen verwendet hatten, interpretiert Python die zweite Zeile als Versuch, das Listenobjekt aufzurufen, was zu einem Fehler führt.
Der obige Fehler kann behoben werden, indem das Listenobjekt in einen anderen Namen umbenannt wird. Der neue Name sollte kein Schlüsselwort sein, da er dafür sorgt, dass der Konstruktor list()
seine funktionalen Eigenschaften behält.
nums = [23, 24, 25, 28, 27, 35, 78]
nums_range = list(range(20, 40))
for number in nums:
if number in nums_range:
print(number, "is the range")
else:
print(number, "is not in the range")
Ausgabe:
23 is the range
24 is the range
25 is the range
28 is the range
27 is the range
35 is the range
78 is not in the range
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedInVerwandter Artikel - Python List
- Alle Vorkommen eines Elements aus einer Liste in Python entfernen
- Konvertieren eines Dictionaries in eine Liste in Python
- Duplikate aus Liste entfernen in Python
- Wie erhält man den Durchschnitt einer Liste in Python
- Was ist der Unterschied zwischen den Listenmethoden append und extend
- Wie man eine Liste in Python in eine Zeichenkette konvertiert
Verwandter Artikel - Python Object
- Anonyme Objekte in Python
- Attribut zu Objekt in Python hinzufügen
- Beheben den Fehler object is not subscriptable in Python
- Object Has No Attribute Fehler behoben in Python
- Python __repr__ Methode
Verwandter Artikel - Python Error
- Adresse wird bereits verwendet Fehler in Python
- AttributeError: __Exit__ in Python
- AttributeError: 'Dict'-Objekt hat kein Attribut 'Append' in Python
- AttributeError: 'NoneType'-Objekt hat kein Attribut 'Text' in Python
- AttributeError: Int-Objekt hat kein Attribut
- AttributeError: Modul Urllib hat keine Attributanforderung