0

我有一段时间没有使用 Python 从 3.1 更新到 3.2。我之前退出 Pygame 程序的方法在下面的代码中。现在我收到一条 Traceback 消息:

Traceback (most recent call last):
  File "C:\Python32\Nero\gogo.py", line 24, in <module>
   terminate()
  File "C:\Python32\Nero\gogo.py", line 18, in terminate
   sys.exit()
SystemExit

现在我不记得 Traceback,但据我所知,这是错误最终出现的地方。这在过去没有产生错误。我尝试使用 exit() 而不是 sys.exit() 但它请求确认以终止程序并关闭 shell(我都不希望发生)。我已经进行了一些谷歌搜索并找到了各种类似的查询,但我仍然不确定理解这个错误并着手解决它的最佳方法?该程序仍然正常运行。我只是隔离了相关部分,因为错误在更大的程序中保持不变。

我的代码:

import random,math,sys,os
import pygame
from pygame.locals import *

os.environ['SDL_VIDEO_CENTERED'] = '1'
pygame.init() #Initializing Pygame

screen=pygame.display.set_mode((500,500) ,0,0)
pygame.display.set_caption("Boo!")
pygame.mouse.set_visible(True)
clock=pygame.time.Clock()
fps=40

#Functions:

def terminate():
    pygame.quit()
    sys.exit()

while True:
    for event in pygame.event.get():
           if event.type == QUIT:
               sys.exit()

谢谢!

4

1 回答 1

0

我在 Win7 w/python 3.2 32bit 和 pygame 1.9.2a0 上对此进行了测试,但没有得到这个结果。

您所看到的并不是真正的“错误”,而是SystemExit调用引发的异常sys.exit()。如果您参考文档,您会看到所有调用都引发了异常。如果没有其他东西处理它,那么它会导致主线程终止。这应该是安静的(如您所见,没有堆栈跟踪)。不幸的是,我无法回答您为什么会看到此堆栈跟踪。

如果您从 GUI 启动脚本,您应该尝试创建.pyw脚本的扩展版本,以防止 shell 窗口与您的 GUI 窗口一起打开。也许这可能会阻止您看到输出?

此外,请确保您实际上是terminate()在 while 循环中调用自己的方法,而不是sys.exit直接调用。

于 2012-03-19T07:19:49.797 回答