Wat betekent “TypeError ‘xxx’ object kan niet worden aangeroepen”?

Als beginnend ontwikkelaar in Python heb ik deze foutmelding vaak in mijn console zien verschijnen, maar ik begrijp niet helemaal wat het betekent.

Kan iemand mij in het algemeen vertellen wat voor soort actie deze fout veroorzaakt?


Antwoord 1, autoriteit 100%

Die fout treedt op wanneer u probeert met ()een object aan te roepen dat niet oproepbaar.

Een aanroepbaar object kan een functie of een klasse zijn (die de methode __call__implementeert). Volgens Python Docs:

object.__call__(self[, args…]): wordt aangeroepen wanneer de instantie als functie wordt “aangeroepen”

Bijvoorbeeld:

x = 1
print x()

xis geen aanroepbaar object, maar je probeert het aan te roepen alsof het het is. Dit voorbeeld levert de fout op:

TypeError: 'int' object is not callable

Voor een beter begrip van wat een oproepbaarobject is, lees dit antwoord in een ander SO-bericht.


Antwoord 2, autoriteit 15%

De andere antwoorden geven de reden voor de fout weer. Een mogelijke oorzaak (om te controleren) kan zijn dat uw klasse een variabele en methode heeft met dezelfde naam, die u vervolgens aanroept. Python benadert de variabele als een aanroepbare – met ().

bijv. Klasse A definieert self.aen self.a():

>>> class A:
...     def __init__(self, val):
...         self.a = val
...     def a(self):
...         return self.a
...
>>> my_a = A(12)
>>> val = my_a.a()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>>

Antwoord 3, autoriteit 11%

De actie vindt plaats wanneer u probeert een object aan te roepen dat geen functie is, zoals bij (). Dit levert bijvoorbeeld de volgende fout op:

>>> a = 5
>>> a()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

Klasse-instanties kunnen ook worden aangeroepen als ze een methode definiëren __call__

Een veelgemaakte fout die deze fout veroorzaakt, is proberen een lijst- of woordenboekelement op te zoeken, maar haakjes te gebruiken in plaats van vierkante haken, bijv. (0)in plaats van [0]


Antwoord 4, autoriteit 4%

De uitzondering treedt op wanneer u een niet-oproepbaar object probeert aan te roepen. Oproepbare objecten zijn (functies, methoden, objecten met __call__)

>>> f = 1
>>> callable(f)
False
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

Antwoord 5

Ik kwam deze foutmelding tegen door een domme fout. Een klassiek voorbeeld van Python die je alle ruimte geeft om jezelf voor de gek te houden. Let op:

class DOH(object):
def __init__(self, property=None):
    self.property=property
def property():
    return property
x = DOH(1)
print(x.property())

Resultaten

$ python3 t.py
Traceback (most recent call last):
  File "t.py", line 9, in <module>
    print(x.property())
TypeError: 'int' object is not callable

Het probleem is natuurlijk dat de functie wordt overschreven met een woning.

Other episodes