我正在使用pydev设置pylint。 问题是即使在评论中,pylint也会报告警告。我希望在任何行或块注释中禁用任何类型的检查。 另外,我希望在我的代码中遵循camelCase命名约定而不是下划线中的变量和参数。 有没有办法指定这样的规则而不用任何pylint插入我的代码:禁用评论?
答案 0 :(得分:46)
您可以使用
全局禁用某个班级的警告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
答案 1 :(得分:19)
正如cfedermann所说,您可以在~/.pylintrc
文件中指定要禁用的消息(如果您不想使用内联注释,请注意您可以使用pylint --generate-rcfile
生成存根文件。
您还可以在生成的文件中,在[BASIC]部分中看到“method-rgx”,“function-rgx”等选项,您可以配置它们以支持驼峰式样式而不是pep8强调风格。
答案 2 :(得分:3)
虽然这是一个老问题,但应该提到现在可以指定他们的own regex for matching with names。
然后你的正则表达式匹配骆驼案例将是这样的:
[a-z][a-zA-Z0-9]{2,30}$
答案 3 :(得分:0)
Here is the custom check example和another example easier to understand。
我遇到了类似于你的问题。以下代码是我的解决方案。我将一个检查器自定义为禁止导入datetime.now
。你可以把它作为参考:
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))
答案 4 :(得分:0)
我可以通过两种方式自定义pylint
。
第一种方法是您的位置
第二种方法是在其中创建一个调用pylint的包装器脚本,在包装器脚本中,您有一堆类似于以下的行:
pylint \
${options_here} \
--disable=xyz1 \
--disable=xyz_2 \
${more_options} \
--disable=xyz_N \
--disable=abc \
$@
当前,我正在使用包装脚本方法,因为我希望按行号对问题进行排序,并且我做了一些shell脚本来获得排序顺序。
答案 5 :(得分:0)
除了上述来自pradyunsg的答案,这是CamelCase的另一个正则表达式:
^([a-z]\w+[A-Z]+\w+)
(来自PyLint的spelling.py
检查器,位于%APPDATA% - Local - Programs - Python - [PythonVersion] - Lib - site-packages - pylint - checkers
文件夹中)