generated from dopt-python/py311
additional logging and error handling
This commit is contained in:
@@ -8,6 +8,7 @@ import json
|
||||
import pickle
|
||||
import re
|
||||
import sys
|
||||
import traceback
|
||||
import uuid
|
||||
from collections import defaultdict
|
||||
from collections.abc import Container, Iterable, Sequence
|
||||
@@ -33,7 +34,9 @@ from PySide6.QtCore import (
|
||||
QObject,
|
||||
Qt,
|
||||
QTimer,
|
||||
QtMsgType,
|
||||
Signal,
|
||||
qInstallMessageHandler,
|
||||
)
|
||||
from PySide6.QtGui import QAction
|
||||
from PySide6.QtWidgets import (
|
||||
@@ -1073,11 +1076,11 @@ def set_form_data(
|
||||
value = data
|
||||
else:
|
||||
if key not in data:
|
||||
logger_gui.debug("---- Key not in data: %s")
|
||||
logger_gui.debug("-------- Data: %s", pformat(data))
|
||||
logger_gui.error("Key not in data: %s", key)
|
||||
logger_gui.error("Data:\n%s", pformat(data))
|
||||
value = data[key]
|
||||
|
||||
logger_gui.debug("---- Key set: %s", key)
|
||||
logger_gui.debug("Key set: %s", key)
|
||||
|
||||
set_widget_value(widget, value)
|
||||
|
||||
@@ -3634,9 +3637,51 @@ class MainWindow(QMainWindow):
|
||||
help_menu.addAction(about_action)
|
||||
|
||||
|
||||
# ** global exception handling
|
||||
def global_exception_handler(exc_type, exc_value, exc_traceback):
|
||||
"""catches all unhandled errors"""
|
||||
|
||||
# format error
|
||||
error_msg = "".join(traceback.format_exception(exc_type, exc_value, exc_traceback))
|
||||
logger_gui.critical(f"UNEXPECTED ERROR:\n{error_msg}")
|
||||
|
||||
# message to user
|
||||
# check if QApplication exists otherwise crashing of crash handler possible)
|
||||
if QApplication.instance():
|
||||
msg_box = QMessageBox()
|
||||
msg_box.setIcon(QMessageBox.Icon.Critical)
|
||||
msg_box.setWindowTitle("Kritischer Fehler")
|
||||
msg_box.setText(
|
||||
"Ein unerwarteter Fehler ist aufgetreten. Die Details wurden protokolliert."
|
||||
)
|
||||
# details for user or screenshots
|
||||
msg_box.setDetailedText(error_msg)
|
||||
msg_box.exec()
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def qt_message_handler(mode, context, message):
|
||||
"""forwards internal Qt C++ warnings to Python loggers"""
|
||||
if mode == QtMsgType.QtInfoMsg:
|
||||
logger_gui.info(message)
|
||||
elif mode == QtMsgType.QtWarningMsg:
|
||||
logger_gui.warning(message)
|
||||
elif mode == QtMsgType.QtCriticalMsg:
|
||||
logger_gui.error(message)
|
||||
elif mode == QtMsgType.QtFatalMsg:
|
||||
logger_gui.critical(message)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = QApplication(sys.argv)
|
||||
app.setStyleSheet(QSS)
|
||||
window = MainWindow()
|
||||
window.show()
|
||||
sys.exit(app.exec())
|
||||
sys.excepthook = global_exception_handler
|
||||
qInstallMessageHandler(qt_message_handler)
|
||||
|
||||
try:
|
||||
app = QApplication(sys.argv)
|
||||
app.setStyleSheet(QSS)
|
||||
window = MainWindow()
|
||||
window.show()
|
||||
sys.exit(app.exec())
|
||||
except Exception as err:
|
||||
logger_gui.critical("Fehler beim Starten der Anwendung:\n%s", str(err), exc_info=True)
|
||||
|
||||
Reference in New Issue
Block a user