Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以检查分支的python linter/静态检查器_Python - Fatal编程技术网

可以检查分支的python linter/静态检查器

可以检查分支的python linter/静态检查器,python,Python,我特别担心: 由于分支执行而未初始化的值:我知道在Java中,当存在可能导致变量未初始化的控制流时,变量a可能尚未初始化 返回值魔术:根据分支的不同,该方法可能返回一个值,或者由于分支没有返回值而无意中什么也不返回 是否有工具可以检查分支是否正确?我知道它需要一种静态类型的语言来实现这一点,但是Python是否有一种等效语言?通常的PyChecker、pylint、pyflakes都不能处理未初始化的分支大小写或您提到的返回值大小写 我在这段代码上测试了它们: x = 1 def foo():

我特别担心:

由于分支执行而未初始化的值:我知道在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报告了一堆愚蠢的东西缺少docstring,不喜欢我的任何变量名


我认为这两种情况都值得在静态语法检查器工具中实现。我不认为它们会在计算上花费太多,或者造成很多误报。可能有一些分支总是被合理的语法检查器采用,但无法确定,例如,如果您有检查至少存在1000个素数的代码,并且如果存在,则使用该分支来定义y。

没有常见的可疑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。

我认为您不会找到任何返回值。在python中,大多数返回任何类型的函数在某些情况下也不返回任何类型。当然,如果一个函数在至少一个分支上返回non-None,那么可以方便地查看它的执行是否落在该函数的末尾。这应该不会太难,即使是你,让它正常工作也不是件小事。我认为你不会找到任何返回值。在python中,大多数返回任何类型的函数在某些情况下也不返回任何类型。当然,如果一个函数在至少一个分支上返回non-None,那么可以方便地查看它的执行是否落在该函数的末尾。不应该太难,即使是你,让它正常工作也不是件小事。如果这些工具是为python3开发的,那么你的例子可能会给出更好的结果。在python2中,False不是一个关键字,所以您可以在某个地方使用False=True,并且在您的foo中,y总是被定义的。在python3中,它是一个关键字,因此工具可以确保该函数将引发NameError.True。我认为pyflakes和大多数静态checker都没有参与解释值和表达式。这就是说,如果你将真设为假,你应该得到比虚假的pyflakes警告更糟糕的警告,我认为这不是什么大问题。你完全正确。我只是指出了一个原因,为什么在python2中,断言这一点是不安全的。但是在python3中,这样说是安全的。如果这些工具是为python3开发的,那么您的示例可能会给出更好的结果。在python2中,False不是一个关键字,所以您可以在某个地方使用False=True,并且在您的foo中,y总是被定义的。在python3中,它是一个关键字,因此工具可以确保该函数将引发NameError.True。我认为pyflakes和大多数静态checker都没有参与解释值和表达式。这就是说,如果你将真设为假,你应该得到比虚假的pyflakes警告更糟糕的警告,我认为这不是什么大问题。你完全正确。我只是指出了一个原因,为什么在python2中,断言这一点是不安全的。但在python3中,这样说是安全的。