Sov*_*iut 5 python wxwidgets wxpython exception
我有一个依赖外部配置文件的 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()
Run Code Online (Sandbox Code Playgroud)
我读过一些关于可以在 wx.App 类中重写的 OnExceptionInMainLoop 方法的内容,但我读到的源代码必须已过时(2004 年),因为 wx.App 似乎不再具有该名称的方法。
编辑:
我需要能够在主循环期间捕获未处理的异常,以便我可以进一步处理它们并将它们显示在错误对话框中,而不是静默传递,并且不终止应用程序。
sys.excepthook 解决方案级别太低,并且与 wxPython 主循环线程不能很好地配合。虽然到另一个答案的链接做了相同的尝试/除了环绕主循环,但由于 wxPython 再次为应用程序/ui 生成了不同的线程,所以它不起作用。
我为Chandler编写了类似的代码,其中任何未处理的异常都会弹出一个包含堆栈和其他信息的窗口,用户可以添加额外的注释(发生时他们做了什么等)并将其提交给 Chandler 开发人员。如果你愿意的话,有点像Mozilla Talkback(我相信现在他们使用 Breakpad)功能。
要在 wxPython 中执行此操作,您需要向 wx.App 提供重定向参数。这将弹出wx.PyOnDemandOutputWindow(您可能希望覆盖它以提供更好看的实现)。
Chandler中的相关源文件在这里:
| 归档时间: |
|
| 查看次数: |
2169 次 |
| 最近记录: |