导入其他文件中使用turtle的函数触发turtle.Terminator错误如何解决
错误原因
- 核心问题是
script.py中的顶层可执行代码没有做执行场景区分:当你在test.py中导入script模块时,Python会自动运行script.py里所有不在函数/类内部的顶层代码,也就是你写的circle(100, 100, 100, 'blue')和turtle.mainloop()。 turtle.mainloop()是阻塞式的事件循环,运行结束后turtle的绘图进程会被销毁,后续你再调用file2.circle()时,turtle已经处于终止状态,自然就会抛出turtle.Terminator错误。- 你之前能正常运行,是因为当时注释/删除了
script.py里的顶层调用代码,导入时不会触发turtle进程启动和终止的逻辑;后续改完运行配置你恢复了这两行代码,就出现了报错。
修复方法
第一步 修改script.py的代码结构
把所有直接运行的顶层代码包在if __name__ == "__main__":判断块中,这个判断的作用是只有直接运行script.py时才会执行块内代码,被其他文件导入时不会执行,修改后的代码如下:
import turtle def circle(x, y, r, colour): # 注意你原来的代码这里函数定义漏了冒号,记得补上 turtle.showturtle() turtle.shape('classic') turtle.penup() turtle.setx(x) turtle.sety(y) turtle.pendown() turtle.pencolor(colour) turtle.fillcolor(colour) turtle.begin_fill() turtle.circle(r) turtle.end_fill() turtle.hideturtle() # 只有直接运行script.py才会执行下面的代码 if __name__ == "__main__": circle(100, 100, 100, 'blue') turtle.mainloop()
*注意你原来的函数定义行def circle(x, y, r, colour)漏了末尾的冒号,运行前请先补上,否则会报语法错误。
第二步 正常导入使用即可
你原来的test.py写法本身没有问题,两种导入方式都可以正常使用:
方式1:直接导入模块
import script as file2 import turtle file2.circle(100, 100, 100, 'red') turtle.mainloop() # 注意test.py里也要加mainloop(),否则窗口会一闪而过
方式2:单独导入函数
from script import circle import turtle circle(100, 100, 100, 'red') turtle.mainloop()
另外你报错信息里出现的circle.draw_circle是函数名调用错误,确认调用时的函数名和script.py里定义的circle保持一致即可。
内容的提问来源于stack exchange,提问作者Apple Juice
相关产品推荐
相关产品推荐

