我特别担心:
由于分支执行导致的未初始化值:我知道在 Java 中存在variable a might not have been initialized
控制流,这可能导致变量无法初始化。
返回值魔法:根据分支,该方法可能会返回一个值,或者由于分支未达到返回值而无意返回任何内容。
有没有可以检查分支是否正确的工具?我知道它需要一种静态类型语言来做到这一点,但是 Python 是否有等价物?
我特别担心:
由于分支执行导致的未初始化值:我知道在 Java 中存在variable a might not have been initialized
控制流,这可能导致变量无法初始化。
返回值魔法:根据分支,该方法可能会返回一个值,或者由于分支未达到返回值而无意返回任何内容。
有没有可以检查分支是否正确的工具?我知道它需要一种静态类型语言来做到这一点,但是 Python 是否有等价物?
通常的嫌疑人(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)。