我特别担心:
由于分支执行导致未初始化的值:我知道在Java中存在variable a might not have been initialized
时存在可能导致变量不能初始化的控制流。
返回值魔术:根据分支,该方法可能会返回一个值,或者无意中返回任何内容,因为分支不会返回。
是否有工具可以检查分支是否正确?我知道它需要一个静态类型语言才能做到这一点,但它是否与Python相当?
答案 0 :(得分: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)。