Python:什么"TypeError'xxx'对象不可调用"是什么意思?

prl*_*900 36 python

作为Python的初级开发人员,我已经多次出现在我的控制台中看到此错误消息,但我不完全明白这意味着什么.

有人能用一般的方式告诉我,这种错误会产生什么样的行为?

Chr*_*ian 44

当您尝试使用()不可调用的对象调用时,会发生该错误.

可调用对象可以是函数或类(实现__call__方法).根据Python Docs:

object .__ call __(self [,args ...]):当实例被"调用"为函数时调用

例如:

x = 1
print x()
Run Code Online (Sandbox Code Playgroud)

x不是一个可调用的对象,但你试图像它一样调用它.此示例产生错误:

TypeError: 'int' object is not callable
Run Code Online (Sandbox Code Playgroud)

为了更好地理解什么是可调用对象,请在另一篇SO帖子中阅读此答案.


wmo*_*365 11

其他答案详细说明了错误的原因。一个可能的原因(检查)可能是你的类有一个同名的变量和方法,然后你调用它们。Python 将变量作为可调用对象访问 - 使用().

例如,A 类定义self.aself.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
>>>
Run Code Online (Sandbox Code Playgroud)


mhl*_*ter 8

当您尝试调用不是函数的对象时会发生该操作,例如(). 例如,这将产生错误:

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

如果类实例定义了方法,也可以调用它们 __call__

一个常见的错误导致此错误是试图查找列表或字典元素,但使用圆括号而不是方括号,即(0)代替[0]