如何在Pylint的文件级别禁用“缺少文档字符串”警告?


99

Pylint引发错误,指出某些文件缺少文档字符串。我尝试为每个类,方法和函数添加docstring,但是Pylint似乎还在检查文件的开头是否应该有docstring。我可以以某种方式禁用它吗?我想在类,函数或方法中缺少文档字符串的通知,但对于具有文档字符串的文件,这不是强制性的。

(是否在专有源文件的开头经常出现法律术语?是否有任何示例?我不知道单独发布这样一个琐碎的问题是否可以。)

Answers:


111

Python模块最好有一个文档字符串,解释该模块的功能,提供的内容以及使用类的示例。这与您在提供版权和许可信息的文件开头经常看到的注释不同,IMO不应在文档字符串中添加注释(有些人甚至认为它们应该完全消失,请参见例如http:// hackerboss。 com / get-rid-of-templates /

在pylint 2.4及更高版本中,您可以missing-docstring通过使用以下三个子消息来区分各种类型:

  • C0114missing-module-docstring
  • C0115missing-class-docstring
  • C0116missing-function-docstring

因此以下.pylintrc文件应该工作:

[MASTER]
disable=
    C0114, # missing-module-docstring

对于以前的Pylint版本,它没有针对文档字符串可能出现的各个位置的单独代码,因此您只能禁用C0111。问题是,如果您在模块范围内禁用此功能,那么它将在模块中的所有位置都被禁用(即,由于缺少函数/类/方法文档字符串,您将不会得到任何C行。这可能不太好。

因此,我建议添加一个小的缺少的文档字符串,例如:

"""
high level support for doing this and that.
"""

很快,您将发现有用的东西,例如提供一些示例,说明如何使用模块的各种类/函数,这些类/函数不一定属于类/函数的各个文档字符串(例如这些互动或类似的快速入门指南)。


9
+1(表示合法(和其他)样板从源代码中消失)。汽车的每个组件均未附有法律声明。一定要创建一个包含项目法律文本的文件。不要将其副本放入每个文件中。
乔纳森·哈特利

22
-1表示以“这是模块foobar”开头的文档字符串。这个模块是什么已经不言而喻了。重新命名它是多余的,并且如果模块更改了名称,则倾向于过时。只需包括“为此提供高级支持”部分。
乔纳森·哈特利

@乔纳森·哈特利:同意。我相应地更新了答案的最后一部分。
gurney alex

16
令人失望的答案。特别是对于Django项目。forms.py“这些是模型...只是在玩弄!它们是形式。因为,您知道该文件名为Forms.py。这不是达芬奇密码。您认为这是什么?”
塞林2012年

12
$ cat my_module/test/__init__.py "Hey, PyLint? SHUT UP"
clacke

66

已经很晚了,但我仍然觉得它很有用。所以分享。在这里找到这个。

您可以为pylint添加“ --errors-only”标志,以禁用警告。

为此,请转到设置。编辑以下行:

"python.linting.pylintArgs": []

"python.linting.pylintArgs": ["--errors-only"]

而且你很好!


32
尽管很有用,但它很有用,"python.linting.pylintArgs": ["--disable=C0111"],因为它只是使文档字符串警告静音。但是,设置仅解决了OP的有关如何仅在模块级别禁用这些警告的问题。
Followben

这是一个更好的选择,因为您只关心像缺少类之类的错误,而不是文档字符串警告
Zerontelli

当我看到一个诉诸于此的项目时,我感到非常难过。pylint是保持代码干净的好工具。它只需要一些爱。
Erik Aronesty '19

9

我认为在不禁用此功能的情况下,修复相对容易。

def kos_root():
    """Return the pathname of the KOS root directory."""
    global _kos_root
    if _kos_root: return _kos_root

您需要做的就是在每个函数中添加三重双引号字符串。


谢谢。我刚刚发现即使单引号也有效
vikas027 17/09/28

好吧,它仍然很烦人,例如,如果您在Django项目上工作,它将创建一堆模块文件,并且您必须进入每个模块文件中进行操作。最好只显示错误消息,而不是带有“” --errors警告pylint用户设置中的“ -only”
Zerontelli,

8

我来找答案是因为,正如@cerin所说,在Django项目中,向django在创建新应用时自动生成的每个文件中添加模块文档字符串是麻烦且多余的。

因此,作为pylint不允许您指定文档字符串类型不同的事实的解决方法,您可以执行以下操作:

pylint */*.py --msg-template='{path}: {C}:{line:3d},{column:2d}: {msg}' | grep docstring | grep -v module

您必须更新msg-template,以便在grep时仍会知道文件名。这将返回除模块以外的所有其他缺少文档字符串类型。

然后,您可以修复所有这些错误,然后运行:

pylint */*.py --disable=missing-docstring

7

。Pylint当前不允许您区分文档字符串警告。

但是,您可以将flake8用于所有python代码检查以及doc-string扩展名,以忽略此警告。

使用pip安装doc字符串扩展名(内部使用pydocstyle)。

pip install flake8_docstrings

然后,您可以只使用--ignore D100开关。例如flake8 file.py --ignore D100


7

只需将以下行放在要禁用这些警告的任何文件的开头。

# pylint: disable=missing-module-docstring
# pylint: disable=missing-class-docstring
# pylint: disable=missing-function-docstring

1
如果要禁用所有功能,则只需禁用missing-docstring(适用于2.4.0之前的版本)。
Pierre.Sassoulas

6

在pylint 2.4及更高版本中,您可以missing-docstring通过使用以下三个子消息来区分各种类型:

  • C0114missing-module-docstring
  • C0115missing-class-docstring
  • C0116missing-function-docstring

因此以下.pylintrc文件应该工作:

[MASTER]
disable=
    C0114, # missing-module-docstring

拯救了我的精神健康
Tsagana Nokhaeva '19

5

编辑“ C:\ Users \您的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"
    ],
}

1

(1)CTRL + SHIFT + P(2)然后键入并单击> preferences:配置特定于语言的设置(3),然后在代码后键入python

{
"python.linting.pylintArgs": [
    "--load-plugins=pylint_django","--errors-only"
],

}

1

就我而言,使用pylint 2.6.0,即使显式禁用了missing-module-docstringmissing-class-docstring并且missing-function-docstring在我的.pylintrc文件中,丢失的docstring消息也不会消失。最后,以下配置对我有用:

[MESSAGES CONTROL]

disable=missing-docstring,empty-docstring

显然,除非同时禁用两个检查,否则pylint 2.6.0仍将验证文档字符串。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.