导入pygame时导入pycode的VScode失败

时间:2018-10-26 16:01:24

标签: python visual-studio-code pygame vscode-settings pylint

导入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。 那么我怎么说pygame一切正常呢?

3 个答案:

答案 0 :(得分:2)

对于E1101: 问题在于大多数Pygame直接在C中实现。现在,就性能而言这一切都很好,但是,pylint(VSCode使用的lint)无法扫描这些C文件。 不幸的是,这些文件定义了很多有用的东西,即QUIT和其他常量,例如MOUSEBUTTONDOWNK_SPACE等,以及init或{ {1}}。

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

现在解决问题。对于您的常数(大写形式),请手动将其导入,如下所示:

"python.linting.pylintArgs"

您现在可以使用它们,而无需在它们之前加上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 和其他函数错误,您可以通过2种方法手动帮助linter解决这些问题:

  • 将其添加到您的代码中的某个位置:init。这将停用整个文件的成员验证,从而防止显示此类错误。
  • 或者您可以用错误将行括起来:

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

这与第一种方法相似,但是将效果限制为仅该行。

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

从长远来看,这是最好的解决方案,因为它将使您的代码更具可读性,因此更易于维护。

答案 1 :(得分:0)

OP您还可以自己添加vscode默认参数来维护在vscode中找到的pylint pygame修复程序。 短毛绒发疯了(crazy_pylint.png),因为您正在使用自己的自定义python.linting.pylintArgs破坏默认的pylint参数。 Pygame的模块忽略修复不工作,以及棉短绒可以通过也包括自己的自定义被破坏的默认参数恢复到不疯狂模式python.linting.pylintArgs

从文档中

  

每当python.linting.pylintUseMinimalCheckers设置为true(默认值)时,都会传递这些参数。   如果指定在pylintArgs的值或使用pylint的配置文件(参见下一部分),然后pylintUseMinimalCheckers被隐式地设置为假。

默认的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

答案 2 :(得分:0)

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

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