gpt4 book ai didi

python - 捕获 MainLoop 异常并在 MessageDialogs 中显示它们

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:33 27 4
gpt4 key购买 nike

我有一个依赖外部配置文件的 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 再次为应用程序/用户界面生成了不同的线程,这不起作用。

最佳答案

不知道这是否适用于 wxPython 应用程序,但在 sys 模块中,您可以覆盖 excepthook 属性,这是一个使用 3 个参数调用的函数,(type, value, traceback),当捕获到未捕获的异常时。您可以在其中安装自己的函数,只处理您想要的异常,并为所有其他异常调用原始函数。

咨询:http://docs.python.org/library/sys.html#sys.excepthook

关于python - 捕获 MainLoop 异常并在 MessageDialogs 中显示它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/408810/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com