"TypeError 'xxx' object is not callable" 的意思是什么?

91
作为一名刚开始学习Python的开发者,我经常在控制台上看到这个错误消息,但我并不完全理解它的含义。
有人能以一般的方式告诉我,什么样的操作会引起这个错误吗?

如果你正在处理支持索引的对象,请使用 x[y] 而非 x(y) - cs95
5个回答

105

当您尝试使用()调用一个非可调用的对象时,会发生该错误。

可调用对象可以是函数或类(实现__call__方法的类)。根据Python文档

object.__call__(self[, args...]):当实例作为函数“调用”时调用

例如:

x = 1
print x()

x 不是可调用对象,但你试图像它是一样调用它。这个例子会产生错误:

TypeError: 'int' object is not callable

为了更好地理解什么是可调用对象请阅读另一个SO帖子中的答案。


15
其他答案详细阐述了错误的原因。可能导致此问题的一个原因(需要检查)是您的类具有相同名称的变量和方法,然后您进行调用。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
>>>

10

当您尝试调用一个不是函数的对象时,例如使用(),就会发生此错误。例如,这将产生以下错误:

尝试调用非函数对象时发生错误。

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

如果类定义了方法__call__,则可以调用类实例。

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


3

当您试图调用一个不可调用对象时,会引发异常。可调用对象包括(函数、方法、带有__call__的对象)

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

0
我通过一个愚蠢的错误遇到了这个错误信息。这是 Python 经典的例子,它给你足够的空间让你自己出洋相。请看:
class DOH(object):
    def __init__(self, property=None):
        self.property=property

    def property():
        return property

    x = DOH(1)
    print(x.property())

结果

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

这里的问题当然是函数被属性覆盖了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接