导入 pygame 时,在 VScode for pylint 中导入失败

Umb*_*uck 3 python pygame pylint visual-studio-code vscode-settings

导入 pygame pylint 时会发疯:

E1101:Module 'pygame' has no 'init' member
E1101:Module 'pygame' has no 'QUIT' member
Run Code Online (Sandbox Code Playgroud)

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

"python.linting.pylintArgs": ["--ignored-modules=pygame"]
Run Code Online (Sandbox Code Playgroud)

它解决了 pygame 的问题,但现在 pylint 以其他方式发疯了:crazy_pylint.png。然后我发现"python.linting.pylintArgs": ["--ignored-files=pygame"],但它所做的是完全禁用我正在工作的整个目录的 pylint。那么我怎么说 pylint pygame 一切正常?

小智 10

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

要解决这个问题,首先,通过删除"python.linting.pylintArgs". 相信我,linter 可以派上用场。

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

from pygame.constants import (
    MOUSEBUTTONDOWN, QUIT, MOUSEMOTION, KEYDOWN
)
Run Code Online (Sandbox Code Playgroud)

您现在可以使用这些,而无需在它们前面加上pygame.

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

接下来,对于您init和其他函数的错误,您可以通过 2 种方法手动帮助 linter 解决这些错误:

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

    # pylint: disable=no-member
    pygame.quit()
    # pylint: enable=no-member

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

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

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