首页 > 解决方案 > 如何让某些 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”和其他设置.json文件。但我已经尝试了这些,但它仍然不起作用!我还尝试添加导入所有pygame模块行并尝试单独添加pygame模块但没有任何工作。请帮助。

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

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

标签: visual-studio-codepygamepylint

解决方案


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

更准确地说,pylint 默认情况下不会在 C 绑定中加载代码。Pygame 具有 c 绑定,因此这意味着 pylint 无法正确检查这些导入,并说由于 C 代码 pylint 无法分析而实际上它工作时没有成员。

在你的中添加 pygameextension-pkg-whitelist实际上是在这种情况下你必须做的。

# 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


推荐阅读