You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入其他文件中使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:24:04