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これが、サンプルケースで、何が入っているのか、何が入っていないのか、m2またはm3(空と見なされる)を正しく検出する理由を説明しています。

于 2013-03-22T07:08:15.663 に答える