为什么说模块pygame没有init成员?

Lud*_*dde 17 python pygame pylint

以下是我的代码:

import pygame
pygame.init()
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为如果我尝试运行该文件,那么似乎没有问题,但是pylint说如下:

E1101:模块'pygame'没有'init'成员

我已经彻底搜索了这个"错误"的解决方案.在我发现的每个相关案例中,解决方案是确保我没有创建名为"pygame"的另一个文件或文件夹,因为在这种情况下,我只是导入我自己的文件或文件夹.但是,我还没有创建一个名称甚至接近"pygame"的文件夹或文件,所以我不知道问题是什么.

如前所述,似乎我能够毫无问题地运行该文件,但我是新手,并且这样的错误使我在学习过程中感到困惑.

我在Visual Studio Code中编写代码,我使用python 3.6,我正在使用pygame 1.9.3并更新了我的pylint.任何帮助,将不胜感激.

Par*_*own 20

如果您有VS代码,请进入.vscode文件夹> settings.json或搜索python.linting.mypyArgs在用户设置选项卡下粘贴花括号

"python.linting.pylintArgs": [
    "--extension-pkg-whitelist=lxml"  // The extension is "lxml" not "1xml"
]
Run Code Online (Sandbox Code Playgroud)

我不再看到pyinit错误.

  • 如果您使用的是Mac的VS Code,则需要执行以下操作才能编辑settings.json文件:1.单击Code(即“文件”选项卡左侧的Visual Studio Code选项卡) )->首选项->设置2.向下滚动到Extensions,然后在列表中单击Python。3.单击任何“在settings.json中编辑”链接。这将打开settings.json进行编辑。 (4认同)
  • 它应该是“--extension-pkg-whitelist=pygame”。 (4认同)
  • 这是做什么用的,我在哪里可以了解更多? (2认同)
  • 实际上,我不得不将 `pygame` 列入白名单以消除这些错误的错误。我应该相应地编辑这个答案吗?白名单 `lxml` 对某些用户有用吗? (2认同)

Com*_*ams 18

当我开始将 Visual Studio Code 与 Python 一起使用时,我遇到了同样的问题。它与拥有另一个 pygame.py 或未正确安装它无关。它与 Visual Studio Code 从字面上理解您的代码这一事实有关,并且由于您无法 import pygame.init(),它认为它不是一个正确的模块。

要解决此问题,请打开 settings.json(进入您的设置,然后单击{}图标)并粘贴

"python.linting.pylintArgs": [
    "--extension-pkg-whitelist=pygame"
]
Run Code Online (Sandbox Code Playgroud)

到它。


小智 16

我的一个模块遇到了同样的问题。这就是我为解决问题所做的工作。(我在 Windows 10 上使用 Visual Studio)

  1. CTRL+ SHIFT+P在Visual Studio
  2. 选择“首选项:打开设置(JSON)”
  3. "python.linting.pylintArgs": ["--generate-members"]在其中一行下方添加(如有必要,请使用逗号)
  4. 保存.json文件 ( CTRL+ S)

对我来说,代码如下所示:

{
    "breadcrumbs.enabled": false,
    "editor.minimap.enabled": false,
    "python.pythonPath": "C:\\Users\\xxx\\Anaconda3",
    "terminal.integrated.rendererType": "dom",
    "window.menuBarVisibility": "default",
    "workbench.activityBar.visible": false,
    "workbench.statusBar.visible": true,
    "python.linting.pylintArgs": ["--generate-members"], //line to add
    "[json]": {

    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。归功于 github 上的@Alamnoor


vt.*_*vt. 10

总结所有答案。这是不加载非默认C扩展名的安全措施。

  1. 您可以将特定扩展名列入白名单。

打开用户设置,然后在{}之间添加以下内容:

"python.linting.pylintArgs": [
    "--extension-pkg-whitelist=extensionname" // comma separated
]
Run Code Online (Sandbox Code Playgroud)
  1. 您可以允许“不安全地加载”所有扩展。

打开用户设置,然后在{}之间添加以下内容:

"python.linting.pylintArgs": [
    "--unsafe-load-any-extension=y"
]
Run Code Online (Sandbox Code Playgroud)

谢谢Richard和Nearoo。


Nea*_*roo 6

答案包括对您问题的答案。简而言之,它解释了:

Pylint 导入模块以有效识别有效的方法和属性。决定导入不属于 python stdlib 一部分的 c 扩展是一种安全风险,可能会引入恶意代码。

作为一个解决方案,它提到,其中包括:

使用.pylintrc设置禁用安全unsafe-load-any-extensions=yes

有关更多信息,请参见此处pylint.rc。最快的方法是.pylintrc在您的项目目录或主目录中创建文件。


小智 5

我发现在 settings.json() 中添加它可以解决这个问题。

"python.linting.pylintArgs":[
            "--extension-pkg-whitelist=pygame",
            "--erros-only"
      ]
Run Code Online (Sandbox Code Playgroud)


Bil*_*lly 2

我找到了答案,它确实对我有用。查看已接受的答案并将其更改为extension-pkg-whitelist=lxml

pylint 1.4 报告所有 C 扩展上的 E1101(无成员)