Путаница по поводу трассировки и выхода - PullRequest
0 голосов
/ 19 марта 2012

Я некоторое время не использовал Python, обновленный до 3.2 с 3.1.Мой предыдущий способ выхода из программ 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 (), но он запрашивает подтверждение для завершения программы, а также закрывает оболочку (ни то, ни другое, чего бы я не хотел).Я провел поиск в Google и нашел множество похожих запросов, но я все еще не уверен, что лучше всего понять эту ошибку и решить ее?Программа по-прежнему функционирует нормально.Я просто выделил соответствующие части, так как ошибка осталась прежней в большой программе.

Мой код:

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()

Спасибо!

1 Ответ

0 голосов
/ 19 марта 2012

Я проверил это на Win7 с 32-битным python 3.2 и pygame 1.9.2a0, и у меня нет такого результата.

То, что вы видите, на самом деле не настоящая «ошибка», а скорее исключение SystemExit, которое возникает при вызове sys.exit(). Если вы обратитесь к документации , вы увидите, что все вызовы - это исключение. Если больше ничего не обрабатывает, то это приводит к завершению основного потока. Это должно быть тихо (без следа стека, как вы видите). К сожалению, я не могу дать вам ответ относительно того, ПОЧЕМУ вы видите эту трассировку стека.

Если вы запускаете свой скрипт из графического интерфейса, попробуйте создать версию скрипта с расширением .pyw, чтобы предотвратить открытие окна оболочки вместе с окном вашего графического интерфейса. Может быть, это может помешать вам увидеть результат?

Также убедитесь, что вы действительно вызываете свой собственный метод terminate() в цикле while, а не sys.exit напрямую.

...