导入 pygame 时在 VScode 中为 pylint 导入失败

问题描述 投票:0回答:3

当导入 pygame pylint 变得疯狂时:

E1101:Module 'pygame' has no 'init' member
E1101:Module 'pygame' has no 'QUIT' member

我在网上搜索了一下,发现了这个:

"python.linting.pylintArgs": ["--ignored-modules=pygame"]

它解决了 pygame 的问题,但现在 pylint 以其他方式变得疯狂:crazy_pylint.png。 然后我找到了

"python.linting.pylintArgs": ["--ignored-files=pygame"]
,但它所做的是完全禁用我正在工作的整个目录的pylint。 那么我怎么用pylint说pygame一切正常呢?

python pygame visual-studio-code pylint
3个回答
10
投票

对于

E1101
: 问题是大部分 Pygame 都是直接用 C 实现的。现在,就性能而言,这一切都很好,但是,pylint(VSCode 使用的 linter)无法扫描这些 C 文件。 不幸的是,这些相同的文件定义了一堆有用的东西,即
QUIT
和其他常量,例如
MOUSEBUTTONDOWN
K_SPACE
等,以及像
init
quit
.

这样的函数

要解决这个问题,首先要做的是,通过删除

"python.linting.pylintArgs"
中的所有参数来停止忽略 pygame 模块。相信我,linter 可以派上用场。

现在解决问题。对于你的常量(大写的任何东西),像这样手动导入它们:

from pygame.constants import (
    MOUSEBUTTONDOWN, QUIT, MOUSEMOTION, KEYDOWN
)

您现在可以使用它们而无需在它们前面添加

pygame.

for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
    if event.type == KEYDOWN: 
        # Code

接下来,对于您的

init
和其他功能错误,您可以通过 2 种方法手动帮助 linter 解决这些问题:

  • 在您的代码中的某处添加:
    # pylint: disable=no-member
    。这将停用整个文件的成员验证,防止显示此类错误。
  • 或者您可以将错误所在的行括起来:

    # pylint: disable=no-member

    pygame.quit()

    # pylint: enable=no-member

这与第一种方法的作用类似,但是它将效果限制在该行。

最后,对于所有其他警告,解决方案是修复它们。 Pylint 可以向您展示您的代码在哪些地方毫无意义,或者不符合 Python 规范。快速浏览一下您的屏幕截图,例如您的模块没有文档字符串,您已经声明了未使用的变量...... Pylint 可帮助您编写简洁、清晰和漂亮的代码。您可以忽略这些警告或隐藏它们(使用

# pylint: disable=
这些代码)或花一点时间清理所有内容。

从长远来看,这是最好的解决方案,因为它会使您的代码更具可读性,因此更易于维护,并且看起来更令人愉悦。


2
投票

对于特定的二进制模块,您可以将其列入 pylint 的白名单。对于 pygame 模块,它将如下所示:

{
    "python.linting.pylintArgs": [
        "--extension-pkg-whitelist=pygame"
    ]
}

0
投票

OP 您还可以通过自己包含 vscode 默认参数来维护您在 vscode 中找到的 pylint pygame 修复程序。 linter 快疯了 (crazy_pylint.png),因为您用自己的自定义

python.linting.pylintArgs
破坏了默认的 pylint 参数。 pygame 模块忽略修复确实有效,并且 linter 可以通过在您自己的自定义中包含破坏的默认参数来返回非疯狂模式
python.linting.pylintArgs
.

来自文档:

只要 python.linting.pylintUseMinimalCheckers 设置为 true(默认值),就会传递这些参数。 如果您在 pylintArgs 中指定一个值或使用 Pylint 配置文件(请参阅下一节),则 pylintUseMinimalCheckers 将隐式设置为 false。

默认 vscode 根据此传递:https://code.visualstudio.com/docs/python/linting 是:

    --disable=all,
    --enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode

所以,这里是如何在 vscode 中传递所有这些默认值以及用户设置中的

--ignored-modules=pygame

    "python.linting.pylintArgs": [
        "--disable=all",
        "--enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode",
        "--ignored-modules=pygame"
    ]

根据@C._ 上面的评论,他绝对是在说实话;棉绒会有所帮助!

我肯定会在启用它的情况下编写更好的代码。

此外,我发现您可以使用启用行和逗号分隔的“可读 pylint 消息”进一步微调您的 pylinter 此处列出:https://github.com/janjur/readable-pylint-messages/blob/master/README.md

所以为了不忽略尾随换行符,您可以附加

enable=
列表参数以简单地包含
trailing-newlines
.

我真的希望这对你有帮助 OP :) 它帮助了我!

感谢提问和分享

--ignored-modules
.

© www.soinside.com 2019 - 2024. All rights reserved.