logo

Hvordan fikse 'liste'-objekt er ikke anropsbart i Python

En liste er også et objekt som brukes til å lagre elementer av forskjellige datatyper. Det er vanlig å se at feil-'liste'-objektet ikke kan kalles mens du bruker listen i våre Python-programmer. I denne artikkelen vil vi lære hvorfor denne feilen oppstår og hvordan du løser den.

Hva betyr det at 'liste'-objekt ikke kan kalles i Python?

De 'liste'-objektet kan ikke kalles feil er en vanlig kjøretidsfeil som oppstår av Python-utviklere. Det oppstår når du prøver å kalle et listeobjekt som om det var en funksjon. I Python er lister objekter som inneholder en ordnet samling av elementer. De får tilgang til ved hjelp av indeksering eller skjæring, ikke ved å kalle dem som funksjoner.



kart med maskinskrift

Syntaks

 ''list' object is not callable'>

Nedenfor er årsakene til at Python 'liste'-objektet ikke kan kalles inn Python :

  • Variabelnavn Konflikter med funksjon.
  • Misbruk av parenteser
  • Metode kolliderer med eiendom.

Variabelnavn er i konflikt med funksjon.

I koden nedenfor er listen tildelt som et variabelnavn, i konflikt med den innebygde funksjonen liste() . For å løse dette må du enten gi variabelen nytt navn eller eksplisitt få tilgang til list() funksjon fra innebygd 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)>

Produksjon

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

Misbruk av parenteser

I koden nedenfor Misbruk av parenteser i stedet for firkantede parenteser for listeindeksering, forårsaker en ' liste 'objektet er ikke anropbar feil.

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

Produksjon



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

Metode kolliderer med eiendom.

I eksemplet nedenfor oppstår feilen på grunn av en navnekonflikt mellom metoden merker() og eiendomsmerkene. Her har Studentklassen et attributtmerker, som i utgangspunktet er tilordnet som en liste som inneholder studentens karakterer. Imidlertid definerer klassen også en metode, merker() , som returnerer den samme listen over merker.

lokal dato
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())>

Produksjon

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

Løsning for Python 'list'-objekt kan ikke kalles i Python

Nedenfor er tilnærmingene for å løse Python 'liste'-objektet kan ikke kalles i Python

  • Riktig variabelnavn
  • Riktig bruk av parenteser
  • Gi nytt navn til konfliktmetode og attributt

Riktig variabelnavn

Jeg n løsningen nedenfor gi nytt navn til variabelen liste for å unngå skyggelegging av innebygde funksjonsnavn. Bruk firkantede parenteser for indeksering i stedet for parenteser for å få tilgang til elementer i listen. Skriv ut begge listene for å vise innholdet.

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)>

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

Riktig bruk av parenteser

For å få tilgang til et listeelement, bruk alltid hakeparenteser, som brukt i koden nedenfor.

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

Produksjon
Ruler>

Gi nytt navn til konfliktmetode og attributt

Ved å gi nytt navn til eiendommen til merker og metoden til get_marks() , vil vi eliminere navnekonflikten, og sikre det student.get_marks() henter listen over merker uten å støte 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())>

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