Python中的崩溃报告

6 投票
2 回答
1929 浏览
提问于 2025-04-15 17:23

有没有一种可以用于纯Python Tkinter应用程序崩溃报告框架?理想情况下,它应该能够在不同的平台上都能使用。

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

下面是一个崩溃报告器的示例:

alt text

2 个回答

2

在你的应用程序中,尽量在可能崩溃的地方加上try和except(比如输入输出、网络等)。每当出现异常时,就调用一个函数,关闭旧的窗口,打开一个新的tkinter通知窗口,或者一个带有你错误信息的自定义窗口

对新窗口使用root.after,并发送你的错误报告(用urllib)。

如果需要的话,可以加一个重启按钮。

其实没有现成的崩溃报告框架,因为tkinter并不是那种类型的图形界面。它基本上只是简单命令行应用的一个包装。

如果你想要上面截图中看到的功能,可以考虑使用pyqt、gtk或wxpython。不过我敢肯定,无论你选择哪个,你都得自己写一个报告功能。

7

与其在代码里到处加上 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() 会把传给错误处理函数的参数格式化,跟 Python 解释器里的表现一样。

补充一下:我忘了提一个小问题。这个方法在多线程中不太好用(至少我上次检查的时候是这样)。如果代码是在另一个线程里运行的,你需要把它放在一个 try..except 块里。

撰写回答