E1101:模块“ turtle”没有“ forward”成员

时间:2018-10-20 05:12:17

标签: python visual-studio-code turtle-graphics pylint

我是编程新手,我下载了Python,并使其在Visual Studio Code中运行。我在弄乱turtle模块及其功能。

函数本身可以工作,但是pylint将其标记为错误,并说没有像我编写的代码那样的“成员”。

我将如何解决此错误? (我不想将其设置为“忽略”问题,而是意识到我输入的代码是有效的,并且来自于turtle模块)

2 个答案:

答案 0 :(得分:1)

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和功能接口混为一谈而遇到bug。

答案 1 :(得分:0)

上述功能由代码生成。 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)的下一次更新中

您还可以将此文件与--load-plugins的{​​{1}}命令行选项一起使用。请参见PyLint documentation for IDE integration。使用的文件必须位于您的pylint