1

在特定代码段上运行 pylint 时,如果已使用 .append() 或 += [var] 将变量添加到列表中,则会因缺少函数而得到误报。有什么办法可以避免 pylint 在这里丢失变量类型?(pylint 0.27.0,python 2.7.2)

#!/usr/bin/python

from foo.lib.machine import Machine
lh = Machine('localhost')

lh.is_reachable()      #Pylint catches this
machines = [lh]
m2 = []
m2.append(lh)
m3 = []
m3 += [lh]
for m in machines:
    m.is_reachable()   #Pylint catches this
for m in m2:
    m.is_reachable()   #Pylint MISSES this
for m in m3:
    m.is_reachable()   #Pylint MISSES this
$ pylint -iy -E pylintcheck
未找到配置文件,使用默认配置
************* 模块 pylintcheck
E1101:6,0:“机器”实例没有“is_reachable”成员
E1101:13,4:“机器”实例没有“is_reachable”成员
4

2 回答 2

2

Python 是动态类型的,分析工具很难理解可能发生的一切。看起来你已经到了 pylint 理解的尽头。

于 2013-03-21T20:15:53.073 回答
1

内德是对的。作为记录,当 pylint 试图了解 eg 列表中的内容时,它只考虑定义该列表的语句,而不是对它的所有访问。这就解释了为什么在您的示例案例中,它可以正确检测到里面有什么machines但不在里面m2m3(被认为是空的)。

于 2013-03-22T07:08:15.663 回答