[英]What does "TypeError 'xxx' object is not callable" means?
作為 Python 的初級開發人員,我在控制台中多次看到此錯誤消息,但我不完全理解它的含義。
誰能告訴我,一般來說,什么樣的動作會產生這個錯誤?
可調用對象可以是函數或類(實現__call__
方法)。 根據Python 文檔:
object.__call__(self[, args...]) :當實例作為函數被“調用”時調用
例如:
x = 1
print x()
x
不是一個可調用的對象,但您試圖將其稱為可調用對象。 此示例產生錯誤:
TypeError: 'int' object is not callable
為了更好地了解什么是可調用對象,請在另一篇 SO 帖子中閱讀此答案。
其他答案詳細說明了錯誤的原因。 一個可能的原因(檢查)可能是你的類有一個同名的變量和方法,然后你調用它們。 Python 將變量作為可調用對象訪問 - 使用()
。
例如,A 類定義了self.a
和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
>>>
當您嘗試調用不是函數的對象時會發生該操作,例如()
。 例如,這將產生錯誤:
>>> a = 5
>>> a()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
如果類實例定義了__call__
方法,也可以調用它們
導致此錯誤的一個常見錯誤是嘗試查找列表或字典元素,但使用括號而不是方括號,即(0)
而不是[0]
當您嘗試調用不可調用對象時會引發異常。 可調用對象是(函數、方法、帶有__call__
對象)
>>> f = 1
>>> callable(f)
False
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
我通過一個愚蠢的錯誤遇到了這個錯誤消息。 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
這里的問題當然是函數被屬性覆蓋了。
這只是意味着某些東西不是可調用的對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.