我有一个依赖于外部配置文件的 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 再次为应用程序 / ui 生成不同的线程而无法正常工作。