En lugar de contaminar su código con try..except
en todas partes, solo debe implementar su propio gancho excepto configurando sys.excepthook
. Aquí está un ejemplo:
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
llamada install_exception()
cuando su aplicación se inicia.
ErrorReportDialog
es un diálogo de Qt que he hecho. traceback.format_exception()
formateará el argumento pasado al gancho excepto de la misma manera que lo hace en el intérprete de Python.
EDITAR: Olvidé mencionar un poco de eso. No funciona con hilos (bueno, al menos no fue la última vez que lo comprobé). Para el código que se ejecuta en otro hilo, deberá envolverlo en un bloque try..except
.
No estoy de acuerdo con la afirmación de que tkinter es "más o menos un envoltorio para aplicaciones de línea de comandos simples". Tkinter es una completa biblioteca GUI adecuada para todo tipo de propósitos. Y, de hecho, Tkinter también se puede usar para implementar todas las características en la captura de pantalla. –
No estoy en desacuerdo, pero si tuviera que hacer una GUI completa y fácil de mantener (con informes de fallos e hilos), con la menor cantidad de esfuerzo, uno usaría uno de los otros kits de herramientas que enumeré anteriormente. La razón por la que existen es porque Tkinter no satisface esta necesidad de manera adecuada. – torger