Вместо того, чтобы загрязнять ваш код 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.
EDIT: Я забыл упомянуть немного о том, что это произошло. Он не работает с потоками (ну, по крайней мере, это не последний раз, когда я проверил). Для кода, запущенного в другом потоке, вам необходимо обернуть его в блок try..except
.
Я не согласен с утверждением, что tkinter - это «довольно обертка для простых приложений в командной строке». Tkinter - полноценная библиотека графического интерфейса, подходящая для всех целей. Фактически, Tkinter также может использоваться для реализации всех функций на скриншоте. –
Я не согласен, но если кто-то должен сделать полноценный, поддерживаемый GUI (с отчетами о сбоях и потоками), с наименьшим усилием, можно использовать один из других наборов инструментов, перечисленных выше. Причина, по которой они существуют, заключается в том, что Tkinter не удовлетворяет эту потребность адекватно. – torger