我现在在使用最新的 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 module 行,并尝试单独添加 pygame 模块,但没有任何效果。请帮忙。
另外,我不知道它是否有帮助,但是当我将鼠标悬停在任何 pygame 模块(例如 K_a 或 K_LCRTL)上时,它们显示为整数而不是特殊的 pygame 模块。它们甚至没有突出显示,只是看起来像普通文本。
编辑:也许值得注意的是,VSC 甚至知道它们是 pygame 控件,因为当我输入它们时,它甚至会自动为我填充它们。我认为它只是 pylint 阻止了某些。但就像我说的,它们都显示为“不是 pygame 成员,pylint 非成员),而且我没有任何名为 game 或 pygame 的文件或任何与之相关的文件。
最佳答案
Pylint 仅分析您的代码,无法阻止在执行期间访问库。如果执行期间出现导入错误,则意味着此特定版本的 pygame 导入错误,无论 pylint 对此有何说明。如果代码有效,则意味着 pylint 错误地认为导入错误。
更准确地说,pylint 默认情况下不会加载 C 绑定(bind)内的代码。 Pygame 具有 c 绑定(bind),因此这意味着 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 =无成员
。
关于visual-studio-code - 如何让某些 pygame 模块在 VSC 中工作?其他修复不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66512731/