39

我在设置 pylint 的地方使用 pydev。问题是即使在评论中,pylint 也会报告警告。我正在寻找禁用任何行或块注释内的任何类型的检查。另外,我希望在我的代码中遵循 camelCase 命名约定而不是下划线来表示变量和参数。有没有办法在不使用任何 pylint 插入我的代码的情况下指定这样的规则:禁用评论?

4

6 回答 6

51

您可以使用全局禁用某个类的警告

pylint --disable=W1234

或者使用特殊的 PyLint 配置文件

pylint --rcfile=/path/to/config.file

下面给出了一个示例配置文件:

[MESSAGES CONTROL]
# C0111 Missing docstring 
# I0011 Warning locally suppressed using disable-msg
# I0012 Warning locally suppressed using disable-msg
# W0704 Except doesn't do anything Used when an except clause does nothing but "pass" and there is no "else" clause
# W0142 Used * or * magic* Used when a function or method is called using *args or **kwargs to dispatch arguments.
# W0212 Access to a protected member %s of a client class
# W0232 Class has no __init__ method Used when a class has no __init__ method, neither its parent classes.
# W0613 Unused argument %r Used when a function or method argument is not used.
# W0702 No exception's type specified Used when an except clause doesn't specify exceptions type to catch.
# R0201 Method could be a function
# W0614 Unused import XYZ from wildcard import
# R0914 Too many local variables
# R0912 Too many branches
# R0915 Too many statements
# R0913 Too many arguments
# R0904 Too many public methods
disable=C0111,I0011,I0012,W0704,W0142,W0212,W0232,W0613,W0702,R0201,W0614,R0914,R0912,R0915,R0913,R0904,R0801

请参阅Pylint 专用站点上文档

于 2012-04-13T10:14:21.067 回答
20

正如 cfedermann 所说,您可以在文件中指定要禁用的消息(请注意,如果您不想使用内联注释,~/.pylintrc可以使用生成存根文件。pylint --generate-rcfile

您还将在生成的文件中的 [BASIC] 部分中看到“method-rgx”、“function-rgx”等选项,您可以根据需要配置它们以支持驼峰式大小写样式而不是 pep8 下划线样式.

于 2012-04-13T11:58:06.020 回答
3

虽然这是一个老问题,但应该提到现在可以指定自己的正则表达式来匹配 names

然后你的正则表达式匹配骆驼案例将是这样的:

[a-z][a-zA-Z0-9]{2,30}$
于 2014-03-13T05:30:30.577 回答
0

这是自定义检查示例另一个更容易理解的示例。

我遇到了和你类似的问题。以下代码是我的解决方案。我定制了一个检查器来禁止导入datetime.now。大家可以参考一下:</p>

class TestChecker(BaseChecker):
    """
    find the check type in the following url:
    https://github.com/PyCQA/pylint/blob/63eb8c4663a77d0caf2a842b716e4161f9763a16/pylint/checkers/typecheck.py
    """
    __implements__ = IAstroidChecker

    name = 'test-checker'
    priority = -1
    msgs = {
        'W0001': (
            'You should not import "%s"',
            'import-datetime-returns',
            'Should not import datetime'
        ),
    }

    def __init__(self, linter):
        super().__init__(linter)
        # I use original pylint's ImportsChecker as a property
        # from  import **
        self.forbidden_import = ['datetime.datetime.now']
        self.forbidden_import_from = ['datetime.now', 'now']
        self.forbidden_import_attribute = ['datetime.now', 'now', 'datetime.datetime.now']

    #the function will be rewrited
    def visit_importfrom(self, node):
        names = [name for name, _alias in node.names]
        for item in names:
            for check in self.forbidden_import_from:
                if item == check:
                    self.add_message('W0001', node=node, args=item)

    def visit_import(self, node):
        names = [name for name, _ in node.names]
        for item in names:
            for check in self.forbidden_import:
                if check == item:
                    self.add_message('W0001', node=node, args=item)

    def visit_attribute(self, node):
        for check_attr in self.forbidden_import_attribute:
            if check_attr == node.as_string():
                self.add_message('W0001', node=node, args=check_attr)


def register(linter):
    linter.register_checker(TestChecker(linter))
于 2018-04-18T01:30:39.207 回答
0

我有两种自定义方式pylint

使用配置文件

第一种方法是你在哪里

  • 调用 pylint 生成模板配置文件
  • 然后你根据你的需要/想要定制配置文件
  • 然后将配置文件放在默认的 pylint 配置文件位置,或者始终调用 pylint 并指定配置文件路径

使用包装脚本

第二种方法是创建一个调用 pylint 的包装器脚本,在包装器脚本中你有一堆看起来像这样的行:

pylint \
       ${options_here} \
       --disable=xyz1 \
       --disable=xyz_2 \
       ${more_options} \
       --disable=xyz_N \
       --disable=abc \
       $@

目前我正在使用包装脚本方法,因为我希望按行号对问题进行排序,并且我做了一些 shell 脚本来获得排序顺序。

于 2018-10-05T17:32:22.937 回答
0

除了 pradyunsg 的上述回答之外,这里是 CamelCase 的另一个正则表达式:

^([a-z]\w+[A-Z]+\w+)

(取自 PyLint 的spelling.py检查器,位于:%APPDATA% - Local - Programs - Python - [PythonVersion] - Lib - site-packages - pylint - checkers文件夹)

于 2019-06-18T17:10:23.840 回答