【问题标题】:Confusion Over Traceback and Exiting对回溯和退出的困惑
【发布时间】:2012-03-19 06:41:35
【问题描述】:

我有一段时间没有使用 Python 从 3.1 更新到 3.2。我之前退出 Pygame 程序的方法在下面的代码中。现在我收到一条 Traceback 消息:

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() 但它要求确认终止程序并关闭 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()

谢谢!

【问题讨论】:

  • 尝试用terminate()替换你引用的最后一行中的sys.exit()
  • 你是从 shell 启动这个脚本,还是在 windows GUI 中双击它?
  • 从 shell 启动。不幸的是,用 terminate() 替换的 Sys.exit 似乎没有改变任何东西。我正在从 shell 运行。

标签: python pygame python-3.2


【解决方案1】:

我在 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

【讨论】:

  • 我似乎一直在调用 terminate() 并且当我尝试各种方法来消除错误时,sys.exit 一定是错误地发布了。我尝试将它作为 .pyw 运行,但没有任何改变。只要它不是程序中的真正问题,它就不会打扰我,但如果我能弄清楚如何删除它,我会在这里更新。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-10-20
  • 2016-12-30
  • 2021-11-28
  • 2018-01-09
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多