导入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。那么我怎么说pylint一切都没关系pygame?
对于E1101
:问题是Pygame的大部分是直接在C中实现的。现在,这在性能方面都很好,但是,pylint(VSCode使用的linter)无法扫描这些C文件。不幸的是,这些相同的文件定义了一堆有用的东西,即QUIT
和其他常量,如MOUSEBUTTONDOWN
,K_SPACE
等,以及像init
或quit
这样的函数。
要解决这个问题,首先要做的是,通过删除"python.linting.pylintArgs"
中的所有参数来停止忽略pygame模块。相信我,短绒可以派上用场。
现在来解决问题。对于常量(大写字母),请手动导入它们,如下所示:
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
接下来,对于你的init
和其他函数错误,你可以通过2种方法手动帮助解决这些问题:
# pylint: disable=no-member
。这将停用整个文件的成员验证,以防止显示此类错误。# pylint: disable=no-member
pygame.quit()
# pylint: enable=no-member
这与第一种方法类似,但它仅将效果限制在该行。
最后,对于所有其他警告,解决方案是修复它们。 Pylint可以向您展示您的代码无意义或不符合Python规范的位置。快速浏览一下你的截图,可以看出你的模块没有文档字符串,你已经声明了未使用的变量...... Pylint可以帮助你编写简洁,清晰,漂亮的代码。您可以忽略这些警告或隐藏它们(使用# pylint: disable=
和these codes)或花一点时间清理所有内容。
从长远来看,这是最好的解决方案,因为它可以使您的代码更具可读性,因此可维护,更令人愉悦。
OP您还可以通过自己包含vscode默认参数来维护在vscode中找到的pylint pygame修复程序。 linter是疯狂的(crazy_pylint.png),因为你用自己的自定义python.linting.pylintArgs
破坏了默认的pylint参数。 pygame模块忽略修复确实有效,并且linter可以通过在你自己的自定义python.linting.pylintArgs
中包含被破坏的默认参数返回非疯狂模式。
来自文档:
只要python.linting.pylintUseMinimalCheckers设置为true(默认值),就会传递这些参数。如果在pylintArgs中指定值或使用Pylint配置文件(请参阅下一节),则pylintUseMinimalCheckers将隐式设置为false。
默认值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"
]
上面的Per @ C._评论,他肯定是说实话; linter会有所帮助!
我正在编写更好的代码,确保启用它。
此外,我发现您可以使用此处列出的启用行和逗号分隔的“可读的pylint消息”进一步微调您的pylinter:https://github.com/janjur/readable-pylint-messages/blob/master/README.md
因此,为了不忽略尾随换行符,您可以附加enable=
列表参数以简单地包含trailing-newlines
。
我真的希望这可以帮助你OP :)它帮助了我!
感谢您提出问题,并分享--ignored-modules
。
对于特定的二进制模块,您可以将其列入白名单以用于pylint。对于pygame模块,它将如下所示:
{
"python.linting.pylintArgs": [
"--extension-pkg-whitelist=pygame"
]
}