Путаница по поводу трассировки и выхода

Я не использовал 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

Теперь я не помню 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()

Спасибо!

1 ответ

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

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

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

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

Другие вопросы по тегам