是否有crash reporting框架可用于pure Python Tkinter applications?理想情况下,它应该跨平台工作。Python中的崩溃报告
实际上,这更像是“异常报告”,因为Python解释器本身几乎不会崩溃。
以下是样本崩溃记者:
是否有crash reporting框架可用于pure Python Tkinter applications?理想情况下,它应该跨平台工作。Python中的崩溃报告
实际上,这更像是“异常报告”,因为Python解释器本身几乎不会崩溃。
以下是样本崩溃记者:
棒尝试节选无处不在您的应用程序可能会崩溃(I/O,网络等)。每当调用except以外,调用一个会杀死旧窗口的函数,产生一个新的tkinter通知窗口或带有错误消息的custom one。
做一个root.after到新窗口并发送错误报告(urllib)。
如果您愿意,请重新启动按钮。
没有崩溃报告框架 - 因为tkinter不是那种类型的GUI。它几乎是简单的命令行应用程序的包装。
如果您想要在上面的屏幕截图中看到的功能,请转到pyqt/gtk或wxpython。但我很确定你去哪里,你必须写自己的记者。
而不是污染你的代码到处都是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()
。
ErrorReportDialog
是我制作的Qt对话框。 traceback.format_exception()
将格式参数传递给except钩子,就像在Python的解释器中一样。
编辑:我忘了提及一个小问题。它不适用于线程(好吧,至少它没有上次我检查)。对于在另一个线程中运行的代码,您需要将其包装在try..except
块中。
我不同意tkinter“几乎是简单的命令行应用程序的包装”的说法。 Tkinter是一个完整的GUI库,适合各种用途。事实上,Tkinter也可以用来实现截图中的所有功能。 – 2009-12-28 17:05:15
我并不反对,但如果要用最少的努力制作一个完整的,可维护的GUI(带有崩溃报告和线程),可以使用上面列出的其他工具包之一。他们存在的原因是因为Tkinter没有充分满足这种需求。 – torger 2009-12-28 23:10:39