Существует ли система отчетов о сбоях , которую можно использовать для чистых приложений Python Tkinter ? В идеале он должен работать кроссплатформенным.
С практической точки зрения, это скорее «сообщение об исключениях», поскольку сам интерпретатор Python почти не дает сбоев.
Вот образец сообщения о сбоях:
Вместо того, чтобы загрязнять ваш код повсюду попыткой , кроме
, вы должны просто реализовать свой собственный, кроме крюка, установив 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 hook точно так же, как и в интерпретаторе Python.
EDIT: Я забыл упомянуть об этом немного. Она не работает с потоками (ну, по крайней мере, в последний раз я не проверял). Для кода, запущенного в другом потоке, его нужно обернуть в блок try...except
.
Stick try исключает исключения везде, где ваше приложение может аварийно завершить работу (ввод/вывод, работа в сети и т.д.). Всякий раз, когда вызывается исключение, вызывайте функцию, которая убьет старое окно, создаст новое окно уведомления о тикинге, или пользовательское с вашим сообщением об ошибке.
Сделайте root.after в новом окне и отправьте сообщение об ошибке (urllib).
Поставьте кнопку перезапуска, если хотите.
Нет никакой системы оповещения об ошибках - так как tkinter не является таким типом GUI. Это практически обертка для простых приложений командной строки.
Go pyqt/gtk или wxpython, если вы хотите, чтобы функции были видны на скриншоте выше. Но я уверен, что куда бы вы ни пошли, вам придется написать свой собственный репортер.
.