6

是否有可用于纯 Python Tkinter 应用程序的崩溃报告框架?理想情况下,它应该跨平台工作。

实际上,这更像是“异常报告”,因为 Python 解释器本身几乎不会崩溃。

这是一个示例崩溃报告器:

替代文字

4

2 回答 2

7

而不是try..except到处污染你的代码,你应该通过设置实现你自己的 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()将以与 Python 解释器中相同的方式格式化传递给 except 钩子的参数。

编辑:我忘了提到一个小问题。它不适用于线程(好吧,至少我上次检查时没有这样做)。对于在另一个线程中运行的代码,您需要将其包装在一个try..except块中。

于 2009-12-28T20:27:30.603 回答
2

在您的应用程序可能崩溃的任何地方(I/O、网络等)都坚持尝试例外。每当调用 except 时,调用将杀死旧窗口、生成新的 tkinter 通知窗口或带有错误消息的自定义窗口的函数。

对新窗口执行 root.after 并发送错误报告 (urllib)。

如果您愿意,请放置一个重新启动按钮。

没有崩溃报告框架——因为 tkinter 不是那种类型的 GUI。它几乎是简单命令行应用程序的包装器。

如果您想要上面屏幕截图中的功能,请使用 pyqt/gtk 或 wxpython。但我很确定无论你走到哪里,你都必须自己写记者。

于 2009-12-28T06:25:25.243 回答