2012-03-19 93 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