导入pygame时,VScode中的导入导致pylint失败

问题描述 投票:1回答:2

导入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 visual-studio-code pygame vscode-settings pylint
2个回答
2
投票

对于E1101:问题是Pygame的大部分是直接在C中实现的。现在,这在性能方面都很好,但是,pylint(VSCode使用的linter)无法扫描这些C文件。不幸的是,这些相同的文件定义了一堆有用的东西,即QUIT和其他常量,如MOUSEBUTTONDOWNK_SPACE等,以及像initquit这样的函数。

要解决这个问题,首先要做的是,通过删除"python.linting.pylintArgs"中的所有参数来停止忽略pygame模块。相信我,短绒可以派上用场。

现在来解决问题。对于常量(大写字母),请手动导入它们,如下所示:

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种方法手动帮助解决这些问题:

  • 在代码中的某处添加:# pylint: disable=no-member。这将停用整个文件的成员验证,以防止显示此类错误。
  • 或者你可以用错误包围该行: # pylint: disable=no-member pygame.quit() # pylint: enable=no-member

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

最后,对于所有其他警告,解决方案是修复它们。 Pylint可以向您展示您的代码无意义或不符合Python规范的位置。快速浏览一下你的截图,可以看出你的模块没有文档字符串,你已经声明了未使用的变量...... Pylint可以帮助你编写简洁,清晰,漂亮的代码。您可以忽略这些警告或隐藏它们(使用# pylint: disable=these codes)或花一点时间清理所有内容。

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


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"
    ]

上面的Per @ C._评论,他肯定是说实话; linter会有所帮助!

我正在编写更好的代码,确保启用它。

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

因此,为了不忽略尾随换行符,您可以附加enable=列表参数以简单地包含trailing-newlines

我真的希望这可以帮助你OP :)它帮助了我!

感谢您提出问题,并分享--ignored-modules


0
投票

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

{
    "python.linting.pylintArgs": [
        "--extension-pkg-whitelist=pygame"
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.