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