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 datoPython3
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]>