【发布时间】:2010-09-29 08:35:39
【问题描述】:
我有一个依赖外部配置文件的 wxPython 应用程序。如果有任何配置错误,我想提供友好的消息对话框。我试图通过将我的 app.MainLoop() 调用包装在 try/except 语句中来完成这项工作。
下面的代码适用于我的 MainWindow 框架类中的初始化代码,但不会捕获 MainLoop 中发生的任何异常。我怎样才能捕捉到这些异常呢?
if __name__ == '__main__':
app = MyApp(0)
try:
MainWindow(None, -1, 'My Cool App')
app.MainLoop()
except ConfigParser.Error, error_message:
messagebox = wx.MessageDialog(None, error_message, 'Configuration Error', wx.OK | wx.ICON_ERROR)
messagebox.ShowModal()
我读过一些关于可以在 wx.App 类中重写的 OnExceptionInMainLoop 方法的内容,但我读到的源代码必须是过时的(2004 年),因为 wx.App 似乎不再有这样的方法名字。
编辑:
我需要能够在我的主循环期间捕获未处理的异常,以便我可以进一步处理它们并将它们显示在错误对话框中,而不是静默传递,也不会终止应用程序。
sys.excepthook 解决方案级别太低,不能很好地与 wxPython 主循环线程配合使用。虽然指向另一个答案的链接执行相同的尝试/除了环绕主循环,但由于 wxPython 再次为 app/ui 生成不同的线程而无法正常工作。
【问题讨论】:
标签: python exception-handling wxpython wxwidgets