2012-03-19 71 views
0

我从3.1版中没有使用过Python。我以前的退出Pygame程序的方法在下面的代码中。现在,我收到回溯消息:关于回溯和退出的困惑

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 

现在我不记得了回溯,但是从我所知这是在错误的结束。这在过去并没有产生错误。我尝试使用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() 

谢谢!

+0

尝试用'terminate()'引用的最后一行替换'sys.exit()'。 – ulidtko 2012-03-19 06:51:05

+0

您是从shell中启动该脚本还是在Windows GUI中双击它? – jdi 2012-03-19 07:01:57

+0

从shell启动。不幸的是,用terminate()代替的Sys.exit似乎没有改变任何东西。我正在运行一个shell。 – Dinoberry 2012-04-02 05:14:38

回答

0

我在Win7上测试了这个w/python 3.2 32bit和pygame 1.9.2a0,我没有那个结果。

你所看到的并不是一个真正的“错误”,而是sys.exit()引发的SystemExit异常。如果你refer to the docs,你会看到所有的呼叫都会引发异常。如果没有其他处理它,那么它会导致主线程终止。这应该是安静的(没有堆栈跟踪,因为你看到)。不幸的是,我无法给你一个关于你为什么看到这个堆栈跟踪的答案。

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

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

+0

我似乎一直在调用terminate()并且sys.exit必须在我尝试各种东西来删除错误时被错误地发布。我尝试将它作为.pyw运行,没有任何改变。只要它在程序中不是真正的问题,它就不会打扰我,但如果我能弄清楚如何删除它,我会在这里更新。 谢谢 – Dinoberry 2012-04-02 05:41:07