不可调用对象被调用¶
ID: py/call-to-non-callable
Kind: problem
Security severity:
Severity: error
Precision: high
Tags:
- reliability
- correctness
- types
Query suites:
- python-security-and-quality.qls
如果调用了一个对象,obj()
,则该对象必须是可调用的,否则将引发 TypeError
。可调用对象是指其类定义了 __call__
特殊方法的任何对象。可调用对象包括函数、方法、类。
内置函数 callable(object)
用于确定一个对象是否可调用。
当 Python 解释器尝试评估诸如 func(arg)
这样的调用时,它将在 func
上调用 __call__
特殊方法。因此,func(arg)
大致等同于 type(func).__call__(func, arg)
,这意味着该类必须定义属性 __call__
,仅仅将其添加到实例中是不够的。
建议¶
由于这个问题通常表明逻辑错误,因此无法给出修复它的通用方法。
示例¶
list
不是可调用的。在本例中,尝试调用 list
会失败,并引发 TypeError
。
a_list = []
a_list()
参考¶
Python 标准库:callable.
Python 语言参考:object.call.