logo

Hur man fixar 'list'-objekt är inte anropsbart i Python

En lista är också ett objekt som används för att lagra element av olika datatyper. Det är vanligt att felet 'list'-objektet inte är anropsbart när du använder listan i våra Python-program. I den här artikeln kommer vi att lära oss varför det här felet uppstår och hur man löser det.

Vad betyder det att 'list'-objekt inte kan anropas i Python?

De 'list'-objekt kan inte anropas fel är ett vanligt körtidsfel som Python-utvecklare stöter på. Det inträffar när du försöker anropa ett listobjekt som om det vore en funktion. I Python är listor objekt som innehåller en ordnad samling av objekt. De nås med hjälp av indexering eller skivning, inte genom att kalla dem som funktioner.

Syntax



 ''list' object is not callable'>

Nedan finns orsakerna till att Python 'list'-objekt inte kan anropas Pytonorm :

  • Variabelnamn Konflikt med funktion.
  • Missbruk av parenteser
  • Metoden krockar med Property.

Variabelnamn står i konflikt med funktion.

I koden nedan tilldelas listan som ett variabelnamn, i konflikt med den inbyggda funktionen lista() . För att lösa detta, byt namn på variabeln eller öppna explicit list() funktion från inbyggd modul.

Python3
# Create a list list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Create a list of quantity moreNumbers = list(range(10,21)) # Print the list and quantity print(list) print(moreNumbers)>

Produktion

Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 4, in moreNumbers = list(range(10,21)) TypeError: 'list' object is not callable>

Missbruk av parenteser

I nedanstående kod Missbruk av parentes istället för hakparenteser för listindexering, vilket orsakar en lista ' objektet är inte anropbart fel.

Python3
items = ['Pencil', 'Eraser', 'Gel Pen', 'Ruler'] print(items(3))>

Produktion

Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 3, in print(items(3)) TypeError: 'list' object is not callable>

Metoden krockar med Property.

I exemplet nedan uppstår felet på grund av en namnkonflikt mellan metoden markerar() och fastighetsmärkena. Här har Studentklassen ett attributmärke, som initialt tilldelas som en lista som innehåller elevens betyg. Men klassen definierar också en metod, markerar() , som returnerar samma lista med märken.

Python3
class Student: def __init__(self, name, marks): self.name = name self.marks = marks def marks(self): return self.marks student = Student('Lalit', [95, 67, 81, 64, 87]) # Generates the error print(student.marks())>

Produktion

Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 11, in print(student.marks()) TypeError: 'list' object is not callable>

Lösning för Python 'list'-objekt kan inte anropas i Python

Nedan är tillvägagångssätten för att lösa Python 'list'-objekt är inte anropsbart i Python

  • Rätt variabelnamn
  • Korrekt användning av parenteser
  • Byt namn på konfliktmetod och attribut

Rätt variabelnamn

jag n lösningen nedan byt namn på variabeln lista för att undvika skuggning av inbyggda funktionsnamn. Använd hakparenteser för indexering istället för parenteser för att komma åt element i listan. Skriv ut båda listorna för att visa deras innehåll.

regexp_like i mysql
Python3
# Create a list one2nine = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Create a list of quantity moreNumbers = list(range(10,21)) # Print the list and quantity print(one2nine) print(moreNumbers)>

Produktion
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]>

Korrekt användning av parenteser

För att komma åt ett listobjekt, använd alltid hakparenteser, som används i koden nedan.

Python3
items = ['Pencil', 'Eraser', 'Gel Pen', 'Ruler'] print(items[3])>

Produktion
Ruler>

Byt namn på konfliktmetod och attribut

Genom att byta namn på fastigheten till märken och metoden att get_marks() , kommer vi att eliminera namnkonflikten och säkerställa det student.get_marks() hämtar listan med märken utan att stöta på TypeError.

Python3
class Student: def __init__(self, name, marks): self.name = name # Change the property name to _marks self._marks = marks # Rename the method to get_marks def get_marks(self): return self._marks student = Student('Lalit', [95, 67, 81, 64, 87]) # Outputs the list of marks print(student.get_marks())>

Produktion
[95, 67, 81, 64, 87]>