我是编程新手,我下载了Python,并使其在Visual Studio Code中运行。我在弄乱turtle模块及其功能。
函数本身可以工作,但是pylint
将其标记为错误,并说没有像我编写的代码那样的“成员”。
我将如何解决此错误? (我不想将其设置为“忽略”问题,而是意识到我输入的代码是有效的,并且来自于turtle模块)
答案 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\pylint
或Lib/site-packages/pylint
结尾。
在pylint
旁边是目录astroid
。
在目录Lib\site-packages\astroid\brain
或Lib/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