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

时间:2009-08-23 15:20:54

标签: python coding-style

我正在尝试找一个工具来检查python中的编码风格。

对于PHP,我看到有代码嗅探器和Drupal使用的小perl script。是否有这样的python代码工具?

4 个答案:

答案 0 :(得分:36)

过去我主要使用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还会生成一个“代码报告”,包括该文件有多少行代码/ comments / docstring / whitespace,每个类别的消息数量,并为您的代码提供“得分” - 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 mailing list here上宣布的,但是现在的下载链接已经死了.. cburroughs有一个github镜像,在github.com/cburroughs/pep8.py有一些小修复,或者您可以从an older revision

获取未经修改的版本

PyChecker是另一种选择,虽然我没有使用它

答案 1 :(得分:12)

pylintpyflakes将是一个良好的开端。

特别是pylint是非常易于配置的,你可以用它强制执行很多东西。

答案 2 :(得分:4)

在接管现有(传统)项目时,在搜索pep8样式执行工具时发现此stackoverflow问题。

https://github.com/hhatto/autopep8

autopep8 -i yourpythonsourcefile.py

将自动转换所有源代码以使用pep8进行确认。在我的遗产项目上尝试过它,效果很好。所以我想我会在SO中更新这个答案。

答案 3 :(得分:2)

Theres是一个名为reindent.py的脚本,它有时会包含在你系统的python发行版中,它会将你所有的代码重新缩进到推荐的4个空格缩进。

如果您在发行版中找不到它,请提供一份副本:http://www.koders.com/python/fid24D30FCD2CE388C67CB980EF55630D25970CFB96.aspx?s=cdef%3Aparser

相关问题