Statt Ihren Code mit try..except
überall zu verschmutzen, sollten Sie nur Ihre eigenen außer Hook implementieren, indem Sie sys.excepthook
setzen. Hier ein Beispiel:
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
Anruf install_exception()
, wenn die Anwendung gestartet wird.
ErrorReportDialog
ist ein Qt-Dialog, den ich gemacht habe. traceback.format_exception()
formatiert das Argument, das an den Exception-Hook übergeben wird, genauso wie es in Pythons Interpreter gemacht wird.
EDIT: Ich habe vergessen, ein wenig Gotcha damit zu erwähnen. Es funktioniert nicht mit Threads (naja, zumindest habe ich das letzte Mal nicht überprüft). Für Code, der in einem anderen Thread ausgeführt wird, müssen Sie ihn in einen try..except
Block umbrechen.
Ich stimme der Aussage nicht zu, dass tkinter "ziemlich ein Wrapper für einfache Befehlszeilen-Anwendungen" ist. Tkinter ist eine vollwertige GUI-Bibliothek, die für alle möglichen Zwecke geeignet ist. Und tatsächlich kann Tkinter auch verwendet werden, um alle Funktionen im Screenshot zu implementieren. –
Ich stimme nicht zu, aber wenn man eine vollwertige, wartbare GUI (mit Crash-Reporting und Threads) erstellen würde, würde man mit dem geringsten Aufwand eines der anderen Toolkits verwenden, die ich oben aufgelistet habe. Der Grund dafür ist, dass Tkinter dieses Bedürfnis nicht ausreichend erfüllt. – torger