如何让某些 pygame 模块在 VSC 中工作?,其他修复不起作用

问题描述

我现在有问题,使用最新的 python 和 vsCode。对于我使用的不同 pygame 函数,我不断收到“模块 pygame 没有空白成员 Pylint no-member”。 K_a、K_s、K_d、K_f 和这些控件在游戏中运行良好,但是像 QUIT 和 KEYDOWN 以及 LCTRL 和 RCTRL 这样的控件只会使游戏崩溃。 VSC 说模块 pygame 没有任何成员,即使是那些有效的。但是当我尝试 LCRTL 等时它会崩溃。

我的理解是它是一个安全功能,其中 Pylint 阻止了某些 pygame 模块,但我不确定,我发现了一些类似的问题,人们建议添加“”python.linting.pylintArgs”:[ "--extension-pkg-whitelist=pygame" 和其他到 settings.json 文件。但是这些我都试过了,还是不行!我还尝试添加 import all pygame modules 行并尝试单独添加 pygame 模块,但没有任何效果。请帮忙。

另外,如果有帮助的话,idk,但是当我将鼠标悬停在我的任何 pygame 模块(例如 K_a 或 K_LCRTL)上时,它们显示为整数而不是特殊的 pygame 模块。它们甚至没有突出显示,只是看起来像普通文本。

编辑:也许值得注意的是,VSC 甚至知道它们是 pygame 控件,因为当我输入它们时,它甚至会为我自动填充它们。我认为它只是 pylint 阻止了某些。但就像我说的那样,他们都显示为“不是 pygame 成员,pylint 非成员),而且我也没有任何名为 game 或 pygame 的文件或任何与之相关的文件

解决方法

Pylint 只分析你的代码,不能阻止在执行过程中访问一个库。如果在执行过程中出现导入错误,则意味着这个特定版本的 pygame 的导入是错误的,无论 pylint 怎么说。如果代码有效,则意味着 pylint 错误地认为导入是错误的。

更准确地说,pylint 默认不会在 C 绑定中加载代码。 Pygame 有 c 绑定,所以这意味着 pylint 无法正确检查那些导入,并说没有成员,因为 C 代码 pylint 无法分析它实际上可以工作。

在您的 extension-pkg-whitelist 中添加 pygame 实际上是您在这种情况下必须执行的操作。

# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code
extension-pkg-whitelist=pygame

但是在一天结束时 pylint 可能会出错,如果导入确实很糟糕,您需要在通过启动代码测试自己后修复这些错误,或者禁用 pylint 检查导入是否与 # pylint: disable=no-member 正常。