Python Turtle 在 window 关闭时显示错误

Python Turtle shows an error when window is closed

我在 python 中遇到问题。 我正在制作一个名为“Stars”的小程序,其中包含超过 29 行的海龟图形。 当我在程序完成之前关闭 turtle window 时,它会显示错误。这不是一个大问题,但是当我将它转换为 exe(使用 pyinstaller)然后在程序完成之前关闭 window 时,会弹出一个警告框并显示:“无法执行脚本 Stars”。

有没有比将每一行都放在 try-except 中更好的忽略它的方法?:

try:
   #each line of code
except:
   pass

提前致谢

有帮助时:我在 Python 3.7.7 和 windows 10

代码如下:

from turtle import *
shape("turtle")
width(2)
color("gold")
begin_fill()
for _ in range(5):
        forward(100)
        right(2 * 360/5)
        forward(100)
        left(360/5)
end_fill()
penup()
goto(0, 200)
write("STAR", font = ("Arial", 50), align = "center")
goto(-200, -200)
pendown()
stamp()
forward(50)
stamp()
forward(50)
stamp()
forward(50)
stamp()
forward(50)
stamp()
forward(50)
stamp()
forward(50)
stamp()
forward(50)
exitonclick()

这是 pyinstaller 命令:

pyinstaller --noconfirm --onefile --noconsole  "C:/Users/jeeva/Desktop/Tanmay_new/python/Python_turtle_answers/Stars.py"

你可以像你说的那样解决这个问题 try..except 像这样阻塞整行:

try:
    # all 29 lines of your code:
except:
    pass

它会工作得很好!


但是,我真的建议把你的程序安排成不同的功能;喜欢:

  1. 创建海龟的函数:

    def create_turtle():
        shape("turtle")
        width(2)
        color("gold")
    
  2. 绘制和填充星形的函数:

    def draw_fill_star():
        begin_fill()
        for _ in range(5):
                forward(100)
                right(2 * 360/5)
                forward(100)
                left(360/5)
        end_fill()
    
  3. 写“星”字的函数:

    def write_start():
        penup()
        goto(0, 200)
        write("STAR", font = ("Arial", 50), align = "center")
    
  4. 写邮票的函数:

    def write_stamps():
        goto(-200, -200)
        pendown()
        stamp()
        forward(50)
        stamp()
        forward(50)
        stamp()
        forward(50)
        stamp()
        forward(50)
        stamp()
        forward(50)
        stamp()
        forward(50)
        stamp()
        forward(50)
        exitonclick()
    
  5. 最后,一个函数来执行它们。

    def execute():
        create_turtle()
        draw_fill_star()
        write_start()
        write_stamps()
    

现在,您可以像这样将函数包装到 try...except 块中:

try:
    execute()
except Terminator:
    print("Program has been terminated")