簡體   English   中英

“TypeError 'xxx' 對象不可調用”是什么意思?

[英]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.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
>>>

當您嘗試調用不是函數的對象時會發生該操作,例如() 例如,這將產生錯誤:

>>> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM