强制执行python代码样式/标准的工具

发布于 2021-01-29 15:09:22

关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。


想改善这个问题吗? 更新问题,使其成为Stack Overflow的主题

5年前关闭。

改善这个问题

我正在尝试找到一种工具来检查python中的编码样式。

对于PHP,我已经看到了Code Sniffer和Drupal使用的一个小Perl脚本。是否有用于python代码的工具?

关注者
0
被浏览
91
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    过去,我主要使用PyLint-它可以突出显示何时使用未定义的变量,何时导入不使用它们的东西等等。

    它可能有点冗长,抱怨诸如行长超过80个字符,变量与特定正则表达式不匹配,类的公共方法太少,方法缺少docs-trings之类的问题。

    例如对于脚本。

    import os
    import somefakelib
    
    def myfunc(x):
        blah = "Something"
        print os.listdir( x+blh )
    

    PyLint生成以下消息:

    C:  1: Missing docstring
    F:  2: Unable to import 'somefakelib' (No module named somefakelib)
    C:  4:myfunc: Missing docstring
    C:  4:myfunc: Invalid name "x" (should match [a-z_][a-z0-9_]{2,30}$)
    C:  4:myfunc: Invalid name "x" (should match [a-z_][a-z0-9_]{2,30}$)
    E:  6:myfunc: Undefined variable 'blh'
    W:  5:myfunc: Unused variable 'blah'
    W:  2: Unused import somefakelib
    

    它们都是有效的投诉,但是我倾向于禁用许多约定和重构消息。您可以禁用特定消息,作为代码中的注释:

    #pylint:disable-msg=R0903,C0103,R0903,F0401,C0301
    

    ..或作为PyLint命令的命令行参数:

    pylint --disable-msg=R0903,C0103,R0903,F0401,C0301 myfile.py
    

    在禁用以上消息的情况下,它将为以上代码生成以下消息:

    C:  1: Missing docstring
    C:  4:myfunc: Missing docstring
    E:  6:myfunc: Undefined variable 'blh'
    W:  5:myfunc: Unused variable 'blah'
    W:  2: Unused import somefakelib
    

    PyLint还会生成一个“代码报告”,包括文件包含多少行代码/注释/文档字符串/空格,每个类别的消息数,并为您的代码提供“分数”-10表示无消息,0表示语法错误

    另一个选择是PyFlakes,我发现它不太冗长(我最近开始使用它代替PyLint)。再次使用上述脚本,PyFlakes给出以下消息:

    example.py:2: 'somefakelib' imported but unused
    example.py:6: undefined name 'blh'
    

    我使用的最后一个选项是pep8.py,顾名思义,它强制执行PEP8。它是迄今为止最多的学究脚本,它强制执行诸如在函数/类之前/之后正确的空白行,代码周围的间距,正确的4位空格缩进等之类的事情。

    在上面的代码上运行,它将产生以下结果:

    example.py:4:1: E302 expected 2 blank lines, found 1
    example.py:6:23: E201 whitespace after '('
    example.py:6:32: W292 no newline at end of file
    

    它主要用于强制执行诸如正确的空格之类的样式操作,对诸如PyLint或PyFlakes之类的代码不做太多静态分析,因此我将pep8.py与PyLint或PyFlakes结合使用。

    pep8.py最初是在此处python邮件列表中宣布的,但是其中的下载链接现在已经消失了。从版本的旧版本

    PyChecker是另一种选择,尽管我没有使用过



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看