高级用法

自动化测试

您还可以执行 pycodestyle 从python代码测试。例如,这对于在项目中自动测试编码样式一致性非常有用:

import unittest
import pycodestyle


class TestCodeFormat(unittest.TestCase):

    def test_conformance(self):
        """Test that we conform to PEP-8."""
        style = pycodestyle.StyleGuide(quiet=True)
        result = style.check_files(['file1.py', 'file2.py'])
        self.assertEqual(result.total_errors, 0,
                         "Found code style errors (and warnings).")

还有一个检查单个文件的快捷方式:

import pycodestyle

fchecker = pycodestyle.Checker('testsuite/E27.py', show_source=True)
file_errors = fchecker.check_all()

print("Found %s errors (and warnings)" % file_errors)

配置测试

您可以配置自动 pycodestyle 以各种方式进行测试。

例如,可以将路径传递给 pycodestyle 应使用:

import pycodestyle

style = pycodestyle.StyleGuide(config_file='/path/to/tox.ini')

还可以显式设置特定选项:

style = pycodestyle.StyleGuide(ignore=['E501'])

跳过文件头

另一个例子与 feature request #143 :跳过文件开头和结尾的行数。这个用例很容易通过PEP8库的自定义包装器实现:

#!python
import pycodestyle

LINES_SLICE = slice(14, -20)

class StyleGuide(pycodestyle.StyleGuide):
    """This subclass of pycodestyle.StyleGuide will skip the first and last lines
    of each file."""

    def input_file(self, filename, lines=None, expected=None, line_offset=0):
        if lines is None:
            assert line_offset == 0
            line_offset = LINES_SLICE.start or 0
            lines = pycodestyle.readlines(filename)[LINES_SLICE]
        return super(StyleGuide, self).input_file(
            filename, lines=lines, expected=expected, line_offset=line_offset)

if __name__ == '__main__':
    style = StyleGuide(parse_argv=True, config_file=True)
    report = style.check_files()
    if report.total_errors:
        raise SystemExit(1)

此模块声明一个行窗口,该窗口在开始处跳过14行,在结束处跳过20行。如果末尾没有可跳过的行,则可以使用 LINES_SLICE = slice(14, None) 例如。

您可以将其保存在文件中,并使用与原始文件相同的选项 pycodestyle .