如何禁用 Pylint 警告?

2025-02-28 08:22:00
admin
原创
88
摘要:问题描述:我正在尝试禁用 Pylint 0.21.1 中的警告 C0321(“一行上有多个语句”——我经常将if具有较短的单行结果的语句放在同一行)(如果重要的话:astng 0.20.1、common 0.50.3 和 Python 2.6.6(r266:84292,2010 年 9 月 15 日,16:2...

问题描述:

我正在尝试禁用 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))。

我尝试disable=C0321在 Pylint 配置文件中添加,但 Pylint 坚持要报告它。该行的变体(如disable=0321disable=C321)被标记为错误,因此 Pylint确实可以正确识别该选项。它只是忽略它。

这是 Pylint 错误吗?还是我做错了什么?有办法解决这个问题吗?

我真的很想消除一些噪音。


解决方案 1:

从 Pylint v. 0.25.3 开始,你可以使用符号名称来禁用警告,而不必记住所有这些代码号。例如:

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

这种风格比神秘的错误代码更有指导意义,也更实用,因为新版本的 Pylint 只输出符号名称,而不是错误代码。

禁用注释可以插入到其自己的行上,并将禁用应用于同一块中的所有内容。或者,也可以将其插入到要应用的行的末尾。

如果 Pylint 输出“ ”消息,您可以像上面的示例一样通过首先Locally disabling包含禁用来摆脱它们。locally-disabled

解决方案 2:

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]

解决方案 3:

我在使用Eclipse时遇到了这个问题,解决方法如下:

在pylint 文件夹(例如)中C:Python26Libsite-packagespylint,按住Shift,右键单击并选择在该文件夹中打开 windows 命令。输入:

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

这将创建standard.rc配置文件。在记事本中打开它[MESSAGES CONTROL],在 下取消注释
disable=并添加要禁用的消息 ID,例如:

disable=W0511, C0321

保存文件,然后在 Eclipse → WindowPreferencesPyDev → *pylint 的参数框中输入:

--rcfile=C:Python26Libsite-packagespylintstandard.rc

现在它应该可以工作了...


您还可以在代码顶部添加注释,Pylint 将对其进行解释:

# pylint: disable=C0321

Pylint 消息代码


在参数框中添加例如--disable-ids=C0321不起作用。

所有可用的 Pylint 消息都存储在字典中_messages,它是类实例的一个属性pylint.utils.MessagesHandlerMixIn。当使用参数运行 Pylint 时--disable-ids=...(至少在没有配置文件的情况下),此字典最初为空,在 Pylint 中引发 KeyError 异常()pylint.utils.MessagesHandlerMixIn.check_message_id()

在 Eclipse 中,您可以在 Pylint 控制台中看到此错误消息(windowsshow viewConsole*,从控制台图标旁边的控制台选项中选择 Pylint 控制台。)

解决方案 4:

要在块中本地禁用警告,请添加

# pylint: disable=C0321

到那个街区。

解决方案 5:

有多种方法可以禁用 Pylint 的警告和错误。使用哪种方法取决于您希望全局还是局部应用禁用 - 这是一个重要的设计决策。

多种方法

  1. 在一个或多个pylintrc文件中。

这不仅仅涉及~/.pylintrcChris Morgan 描述的文件(位于您的 $HOME 目录中)。Pylint 将搜索 rc 文件,其优先级会更高地评价“更近”的文件:

  • pylintrc当前工作目录中的文件;或

  • 如果当前工作目录位于 Python 模块中(即,它包含一个__init__.py文件),则向上搜索 Python 模块层次结构,直到pylintrc找到该文件;或者

  • 环境变量 PYLINTRC 命名的文件;或

  • 如果您的主目录不是/root

+ `~/.pylintrc`; 或者
+ `~/.config/pylintrc`; 或者
+ `/etc/pylintrc`

请注意,这些文件大多数都已命名pylintrc——只有中的文件~以点为前导。

在您的pylintrc文件中添加行以禁用特定的 pylint 消息。例如:

[MESSAGES CONTROL]
disable=locally-disabled
  1. 进一步从命令行禁用pylint,如 Aboo 和 Cairnarvon 所述。这看起来像pylint --disable=bad-builtin。重复--disable以禁用其他项目。

  2. 进一步禁用单个 Python 代码行,如 Imolit 所述。它们看起来像some statement # pylint: disable=broad-except(原始源代码行末尾的额外注释)并且仅适用于当前行。我的方法是始终将它们放在其他代码行的末尾,这样它们就不会与块样式混淆,请参见下文。

  3. 进一步禁用针对更大的 Python 代码块的定义,直至完整的源文件。

* 这些看起来像`# pragma pylint: disable=bad-whitespace`(注意`pragma`关键词)。
* 这些**适用于 pragma 之后的每一行**。将这些块放在文件顶部会使抑制适用于整个文件。将同一块放在文件较低位置会使它们仅适用于块后面的行。我的方法是始终将它们放在自己的一行上,这样它们就不会与单行样式混淆,请参见上文。
* 当抑制仅适用于代码范围时,使用`# pragma pylint: enable=bad-whitespace`(现在使用`enable`not `disable`)来停止抑制。

请注意,禁用单行使用# pylint语法,而禁用此行以后使用# pragma pylint语法。这些很容易混淆,尤其是在复制和粘贴时。

综合起来

我通常混合使用这些方法。

  • 我使用~/.pylintrc绝对的全球标准——这些标准非常少。

  • 当存在特定于项目的标准时,我会在 Python 模块中的不同级别使用项目级别pylintrc。尤其是当您从其他人或团队那里获取代码时,您可能会发现他们使用了您不喜欢的约定,但您不想重新编写代码。将设置保持在此级别有助于避免将这些做法传播到其他项目。

  • 我在单个源文件的顶部使用块样式的指令。我喜欢在开发过程中关闭指令(停止抑制消息),即使对于我不同意的 Pylint 标准(例如“公共方法太少”——我总是在自定义异常类上收到该警告)——但在开发过程中查看更多/甚至所有 Pylint 消息很有帮助。这样,您就可以找到想要使用单行指令解决的情况(见下文),或者只需为下一位开发人员添加注释以解释为什么在这种情况下该警告是可以接受的。

  • 即使代码已准备好签入,我也会保留一些块样式的指令。我尝试使用其中的几个,但当它对模块有意义时,可以将其用作文档。但是,我尝试保留尽可能少的指令,最好不保留。

  • 我使用单行注释样式来处理特别严重的错误。例如,如果在某个地方确实需要执行except Exception as exc,我会在该行上放置 ,# pylint: disable=broad-except而不是采用更全局的方法,因为这是一个奇怪的异常,需要将其调出,基本上是作为一种文档形式。


和 Python 中的其他所有东西一样,你可以在不同的间接层级上操作。我的建议是考虑什么属于哪个层级,这样你就不会对 Pylint 采取过于宽松的态度​​。

解决方案 6:

这是常见问题解答:

4.1 是否可以本地禁用特定消息?

是的,此功能已添加到 Pylint 0.11 中。这可以通过
# pylint: disable=some-message,another-one在所需的块级别或所需代码行的末尾添加来完成。

4.2 有没有办法只禁用特定模块的消息?

是的,您可以在文件顶部的注释中添加相应的选项,在模块级别禁用或启用(全局禁用)消息:

# pylint: disable=wildcard-import, method-hidden
# pylint: enable=too-many-lines

您可以通过以下方式禁用消息:

  • 数字ID:E1101E1102,等等

  • 象征性讯息:no-memberundefined-variable、等等

  • 一组支票的名称。您可以使用 来获取这些支票pylint --list-groups

  • 支票类别:C、、、等等RW

  • 所有的检查都用all

请参阅文档(或pylint --list-msgs在终端中运行)以获取 Pylint 消息的完整列表。文档还提供了如何使用此功能的一个很好的示例。

解决方案 7:

您还可以使用以下命令:

pylint --disable=C0321  test.py

我的Pylint版本是0.25.1。

解决方案 8:

您只需添加一行即可禁用您想要禁用的功能。

例如,

#pylint: disable = line-too-long, too-many-lines, no-name-in-module, import-error, multiple-imports, pointless-string-statement, wrong-import-order

在模块的最开始处添加此内容。

解决方案 9:

如果这对某人有帮助,如果您使用的是Visual Studio Code,它希望文件采用 UTF-8 编码。为了生成文件,我pylint --generate-rcfile | out-file -encoding utf8 .pylintrc在PowerShell中运行。

解决方案 10:

*抱歉,关于发帖人的一般偏好,与最初的问题有点不同,最好通过全局配置文件来解决。但是,与许多流行的答案一样,我倾向于在我的代码中看到什么可能触发警告,并最终通知贡献者。我对 @imolit 的回答

的评论需要简短一些,以下是一些详细信息。*

对于multiple-statements消息,最好在块或模块级别禁用它,如下所示

# pylint: disable=multiple-statements

我的用例现在attribute-defined-outside-init在 unittest setup() 中,我选择禁用行范围的消息,并使用消息代码来避免该line-too-long问题。

class ParserTest(unittest.TestCase):
   def setUp(self):
       self.parser = create_parser()  # pylint: disable=W0201

可以使用以下命令在本地找到对应关系

$ pylint --list-msgs | grep 'outside-init'
:attribute-defined-outside-init (W0201): *Attribute %r defined outside __init__*

当然,您也可以从代码中检索符号名称。

解决方案 11:

根据Pylint文档,最简单的方法是使用此图表:

  • C 约定相关检查

  • R 重构相关检查

  • W 各种警告

  • E 错误,代码中可能存在的错误

  • 如果发生错误导致 Pylint 无法进一步处理,则会导致 F 致命。

因此可以使用:

pylint -j 0 --disable=I,E,R,W,C,F YOUR_FILES_LOC

解决方案 12:

在下一行禁用

除了其他答案之外:您还可以使用以下方法禁用下一行的通知,disable-next 例如,对于函数定义或一般的长行,这可能会派上用场:

# pylint: disable-next=dangerous-default-value
def find_zeros(my_list = []):
    sum = 0
    for element in list:
        if element == 0:
            sum += 1
    return sum

解决方案 13:

Python 语法允许一行中有多个语句,以分号 (;) 分隔。但是,将每行限制为一个语句可以让人类在阅读时更容易理解程序的逻辑。

因此,解决这个问题的另一种方法是了解为什么会出现 lint 消息,并且不要在一行上放置多个语句。

是的,您可能会发现每行编写多个语句更容易,但是,Pylint 不仅适合您,还适用于代码的所有其他读者。

解决方案 14:

pylint一直忽略disable我的列表中的内容.pylintrc。最后,我意识到我正在执行:

pylint --disable=all --enable=F,E,W

它覆盖了disable我的列表中的内容.pylintrc

仅显示致命错误和警告的正确命令是:

pylint --disable=C,R

解决方案 15:

编辑“C:\Users\Your User\AppData\Roaming\Code\User\settings.json”并在末尾添加“python.linting.pylintArgs”及其行,如下所示:

{
    "team.showWelcomeMessage": false,
    "python.dataScience.sendSelectionToInteractiveWindow": true,
    "git.enableSmartCommit": true,
    "powershell.codeFormatting.useCorrectCasing": true,
    "files.autoSave": "onWindowChange",
    "python.linting.pylintArgs": [
        "--load-plugins=pylint_django",
        "--errors-only"
    ],
}
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2941  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1803  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   31  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   31  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   28  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用