2024-05-29 07:27:40 发布
网友
是否存在可用于pure Python Tkinter applications的crash reporting框架?理想情况下,它应该跨平台工作。在
实际上,这更像是“异常报告”,因为Python解释器本身几乎不会崩溃。在
下面是一个坠机记者的样本:
与其到处用try..except污染代码,不如通过设置sys.excepthook实现自己的except钩子。下面是一个例子:
try..except
sys.excepthook
import sys import traceback def install_excepthook(): def my_excepthook(exctype, value, tb): s = ''.join(traceback.format_exception(exctype, value, tb)) dialog = ErrorReportDialog(None, s) dialog.exec_() sys.excepthook = my_excepthook
在应用程序启动时调用install_exception()。在
install_exception()
ErrorReportDialog是一个Qt对话框。traceback.format_exception()将格式化传递给except钩子的参数,方法与在Python解释器中的方式相同。在
ErrorReportDialog
traceback.format_exception()
编辑:我忘了提一点问题。它不适用于线程(好吧,至少上次我检查时没有)。对于在另一个线程中运行的代码,您需要将其包装在try..except块中。在
在应用程序可能崩溃的任何地方(I/O、网络等),都要坚持try异常。无论何时调用except,都要调用一个函数来终止旧窗口,生成一个新的tkinter通知窗口,或者带有错误消息的custom one。在
做一个根。后并发送错误报告(urllib)。在
如果你愿意的话,放一个重启按钮。在
没有崩溃报告框架-因为tkinter不是那种GUI。它几乎是简单命令行应用程序的包装器。在
如果您希望在上面的屏幕截图中看到这些特性,请使用pyqt/gtk或wxpython。但我敢肯定,无论你去哪里,你都得自己写记者。在
与其到处用
try..except
污染代码,不如通过设置sys.excepthook
实现自己的except钩子。下面是一个例子:在应用程序启动时调用
install_exception()
。在ErrorReportDialog
是一个Qt对话框。traceback.format_exception()
将格式化传递给except钩子的参数,方法与在Python解释器中的方式相同。在编辑:我忘了提一点问题。它不适用于线程(好吧,至少上次我检查时没有)。对于在另一个线程中运行的代码,您需要将其包装在
try..except
块中。在在应用程序可能崩溃的任何地方(I/O、网络等),都要坚持try异常。无论何时调用except,都要调用一个函数来终止旧窗口,生成一个新的tkinter通知窗口,或者带有错误消息的custom one。在
做一个根。后并发送错误报告(urllib)。在
如果你愿意的话,放一个重启按钮。在
没有崩溃报告框架-因为tkinter不是那种GUI。它几乎是简单命令行应用程序的包装器。在
如果您希望在上面的屏幕截图中看到这些特性,请使用pyqt/gtk或wxpython。但我敢肯定,无论你去哪里,你都得自己写记者。在
相关问题 更多 >
编程相关推荐