E1101:Module 'turtle' 没有 'forward' 成员

E1101:Module 'turtle' has no 'forward' member

我是编程新手,我下载了 Python 并在 Visual Studio 代码中得到了 运行。我在摆弄 turtle 模块及其功能。

函数本身有效,但 pylint 将其标记为错误,并表示没有像我编码的那样 "member"。

我该如何解决这个错误? (我不想将其设置为 "ignore" 问题,而是认识到我输入的代码是有效的并且来自 turtle 模块)

turtle 模块暴露了两个接口,一个 functional 一个和一个 object-oriented 一个。功能接口是在加载时从面向对象的接口以编程方式派生的,因此静态分析工具看不到它,因此出现 pylint 错误。而不是功能接口:

import turtle

turtle.forward(100)

turtle.mainloop()

为此 pylint 生成 no-member,尝试使用面向对象的接口:

from turtle import Screen, Turtle

screen = Screen()

turtle = Turtle()

turtle.forward(100)

screen.mainloop()

这个特别的 import 乌龟屏蔽了功能接口,我推荐它,因为人们经常通过混合 OOP 和功能接口来 运行 进入错误。

提到的函数是代码生成的。 PyLint 只做静态分析。

我写了一个星形大脑(插件)来帮助 PyLint 使用的 Python 解析器添加这些功能。

找到您安装 PyLint 的位置(目录以 Lib\site-packages\pylintLib/site-packages/pylint.

结尾

pylint 旁边是一个目录 astroid

在目录 Lib\site-packages\astroid\brainLib/site-packages/astroid/brain 中创建一个文件 brain_turtle.py,其内容为:

import astroid

def register(linter):
  pass

def transform():
  import turtle
  def _make_global_funcs(functions, cls):
    funcs = []
    for methodname in functions:
      method = getattr(cls, methodname)
      paramslist, argslist = turtle.getmethparlist(method)
      if paramslist == "": continue
      funcs.append(f"def {methodname}{paramslist}: return")
    return funcs
  funcs = []
  funcs.extend(_make_global_funcs(turtle._tg_screen_functions, turtle._Screen))
  funcs.extend(_make_global_funcs(turtle._tg_turtle_functions, turtle.Turtle))
  return astroid.parse('\n'.join(funcs))

astroid.register_module_extender(astroid.MANAGER, "turtle", transform)

根据 PyLint 的 IDE 集成,您可能需要重新启动 IDE。

我还创建了一个 astroid issue 将这个大脑添加到 PyLint (Astroid) 的下一个更新中

您还可以将此文件与 pylint--load-plugins 命令行选项一起使用。参见PyLint documentation for IDE integration。使用的文件需要在您的 PYTHONPATH