Plutôt que de polluer votre code avec try..except
partout, vous devez simplement implémenter le vôtre sauf le hook en définissant sys.excepthook
. Voici un exemple:
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
Appel install_exception()
lorsque votre application démarre.
ErrorReportDialog
est une boîte de dialogue Qt que j'ai faite. traceback.format_exception()
formatera l'argument passé à l'exception hook de la même manière que dans l'interpréteur Python.
EDIT: J'ai oublié de mentionner un peu ça avec ça. Cela ne fonctionne pas avec les threads (enfin, au moins, je n'ai pas vérifié la dernière fois). Pour le code s'exécutant dans un autre thread, vous devrez l'envelopper dans un bloc try..except
.
Je ne suis pas d'accord avec l'affirmation que tkinter est «à peu près un emballage pour les applications de ligne de commande simples». Tkinter est une bibliothèque graphique à part entière adaptée à toutes sortes de besoins. Et en fait, Tkinter peut également être utilisé pour implémenter toutes les fonctionnalités de la capture d'écran. –
Je ne suis pas en désaccord, mais si l'on créait une interface graphique complète et maintenable (avec des rapports de plantage et des threads), avec le moins d'effort possible, on utiliserait l'un des autres toolkits listés ci-dessus. La raison pour laquelle ils existent est parce que Tkinter ne répond pas adéquatement à ce besoin. – torger