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 报告了一堆愚蠢的事情(缺少文档字符串,不喜欢我的任何变量名......)。

我认为这两种情况都值得在静态语法检查器工具中实现。我认为它们的计算成本不会那么高,也不会导致很多误报。但是,可能有一些分支总是被合理的语法检查器决定但无法确定(例如,如果您有检查至少存在 1000 个素数的代码,如果存在则使用分支来定义 y)。

于 2012-09-19T07:59:24.973 回答