如何禁用Pylint警告?

433 投票
14 回答
579438 浏览
提问于 2025-04-16 07:57

我想在 Pylint 0.21.1 中关闭警告 C0321(意思是“单行上有多个语句”——我经常把短的单行结果的 if 语句放在同一行),顺便提一下,我用的是 astng 0.20.1,common 0.50.3,还有 Python 2.6.6(版本信息:r266:84292,2010年9月15日,16:22:56)。

我试着在 Pylint 的配置文件里加上 disable=C0321,但是 Pylint 还是坚持要报告这个警告。即使我尝试其他写法(比如 disable=0321disable=C321),也都被标记为错误,所以 Pylint 确实是识别这个选项的。它只是忽略了我的设置。

这是 Pylint 的一个 bug,还是我做错了什么?有没有什么办法可以解决这个问题?

我真的很想去掉这些多余的警告。

14 个回答

205

我在使用 Eclipse 的时候遇到了这个问题,后来我这样解决的:

首先,找到 pylint 文件夹(比如说 C:\Python26\Lib\site-packages\pylint),然后按住 Shift,右键点击这个文件夹,选择在这个文件夹中打开命令窗口。接着输入:

lint.py --generate-rcfile > standard.rc

这样会创建一个 standard.rc 配置文件。用记事本打开这个文件,在 [MESSAGES CONTROL] 部分,取消对 disable= 的注释,并添加你想要禁用的消息 ID,比如:

disable=W0511, C0321

保存这个文件,然后在 Eclipse 中依次点击 窗口首选项PyDev → *pylint,在参数框中输入:

--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rc

现在应该就可以正常工作了...


你还可以在代码的顶部添加一个注释,这样 Pylint 会识别这个注释:

# pylint: disable=C0321

Pylint 消息代码


在参数框中添加比如 --disable-ids=C0321 是不管用的。

所有可用的 Pylint 消息都存储在一个叫 _messages 的字典里,这是 pylint.utils.MessagesHandlerMixIn 类的一个实例属性。当你用 --disable-ids=... 参数运行 Pylint 时(至少在没有配置文件的情况下),这个字典一开始是空的,这会导致 Pylint 报出 KeyError 异常(pylint.utils.MessagesHandlerMixIn.check_message_id())。

在 Eclipse 中,你可以在 Pylint 控制台看到这个错误信息(窗口* → 显示视图控制台,然后在控制台选项中选择 Pylint 控制台,旁边有控制台图标)。

272

从 Pylint 版本 0.25.3 开始,你可以使用符号名称来关闭警告,而不需要记住那些代码数字。比如:

# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long

这种写法比那些难懂的错误代码更容易理解,也更实用,因为 Pylint 的新版本只会输出符号名称,而不是错误代码。

你可以在单独的一行上插入一个禁用注释,这样它会对后面同一块代码的所有内容生效。或者,你也可以把它放在你想要禁用的那一行的末尾。

如果 Pylint 输出了“Locally disabling”的消息,你可以通过在上面的例子中先加入禁用的 locally-disabled 来解决这个问题。

237

pylint --generate-rcfile 这个命令会显示如下内容:

[MESSAGES CONTROL]

# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time.
#enable=

# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once).
#disable=

所以看起来你的 ~/.pylintrc 文件里应该有一行 disable=,并且这行要放在一个叫做 [MESSAGES CONTROL] 的部分里。

撰写回答