2012-03-19 3 views
0

Я не использовал Python в течение некоторого времени, обновленный до 3.2 из 3.1. Мой предыдущий метод выхода из Pygame-программ находится в коде ниже. Сейчас я получаю сообщение Traceback:Confusion Over Traceback и Exiting

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(), но он запрашивает подтверждение о завершении программы и закрывает оболочку (ни то, что я хочу выполнить). Я сделал несколько поисков 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() 

Спасибо!

+0

Попробуйте заменить 'sys.exit()' в последней строке, которую вы указали с 'terminate()'. – ulidtko

+0

Вы запускаете этот скрипт из оболочки или дважды щелкаете его в графическом интерфейсе Windows? – jdi

+0

Запуск из оболочки. К сожалению, Sys.exit заменен на terminate(), похоже, ничего не изменил. Я запускаю из оболочки. – Dinoberry

ответ

0

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

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

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

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

+0

Кажется, я вызывал terminate(), и sys.exit, должно быть, был неправильно опубликован, когда я пытался различными способами удалить ошибку. Я попытался запустить его как .pyw, и ничего не изменилось. Меня это не беспокоит, пока это не проблема в программе, но если я смогу понять, как ее удалить, я обновлю здесь. Спасибо – Dinoberry