2

私は特に心配しています:

ブランチの実行による初期化されていない値: Javaにはvariable a might not have been initialized、変数が初期化されない原因となる可能性のある制御フローが存在する場合があることを私は知っています。

戻り値の魔法:ブランチによっては、メソッドが値を返すか、ブランチが戻り値に到達しないために誤って何も返さない場合があります。

ブランチが正しいかどうかを調べることができるツールはありますか?それを正確に行うには静的型付き言語が必要であることは知っていますが、Pythonに相当するものはありますか?

4

1 に答える 1

0

通常の容疑者(PyChecker、pylint、pyflakes)は、「ブランチ用に初期化されていない」ケースまたは「戻り値」のケースを処理しません。

私はこのコードでそれらすべてをテストしました:

x = 1

def foo():
    if False:
        y = 1
    print y     # not defined!

def bar():
    if x == 1:
        return True
    # fall off end

pyflakes と PyChecker は問題を報告せず、pylint はたくさんのばかげたことを報告します (docstring の欠落、私の変数名のどれも好きではありません...)。

これらのケースは両方とも、静的構文チェッカー ツールで実装する価値があると思います。計算コストがそれほど高くなったり、誤検知があったとしても多くの原因になったりするとは思いません。ただし、常に取られるが、合理的な構文チェッカーでは決定できない分岐がいくつかある場合があります (たとえば、少なくとも 1000 個の素数が存在することをチェックするコードがあり、存在する場合は分岐を取って y を定義する場合)。

于 2012-09-19T07:59:24.973 に答える