diff --git a/src/kleinanzeigen_bot/__init__.py b/src/kleinanzeigen_bot/__init__.py index 9f0e553..553affb 100644 --- a/src/kleinanzeigen_bot/__init__.py +++ b/src/kleinanzeigen_bot/__init__.py @@ -1184,12 +1184,20 @@ def main(args:list[str]) -> None: loggers.configure_console_logging() signal.signal(signal.SIGINT, error_handlers.on_sigint) # capture CTRL+C - sys.excepthook = error_handlers.on_exception + + # sys.excepthook = error_handlers.on_exception + # -> commented out because it causes PyInstaller to log "[PYI-28040:ERROR] Failed to execute script '__main__' due to unhandled exception!", + # despite the exceptions being properly processed by our custom error_handlers.on_exception callback. + # We now handle exceptions explicitly using a top-level try/except block. + atexit.register(loggers.flush_all_handlers) - bot = KleinanzeigenBot() - atexit.register(bot.close_browser_session) - nodriver.loop().run_until_complete(bot.run(args)) + try: + bot = KleinanzeigenBot() + atexit.register(bot.close_browser_session) + nodriver.loop().run_until_complete(bot.run(args)) + except Exception: + error_handlers.on_exception(*sys.exc_info()) if __name__ == "__main__": diff --git a/src/kleinanzeigen_bot/resources/translations.de.yaml b/src/kleinanzeigen_bot/resources/translations.de.yaml index 469bd5a..1ed9c42 100644 --- a/src/kleinanzeigen_bot/resources/translations.de.yaml +++ b/src/kleinanzeigen_bot/resources/translations.de.yaml @@ -201,6 +201,7 @@ kleinanzeigen_bot/utils/error_handlers.py: "Aborted on user request.": "Auf Benutzeranfrage abgebrochen." on_exception: "%s: %s": "%s: %s" + "Unknown exception occurred (missing exception info): ex_type=%s, ex_value=%s": "Unbekannter Fehler aufgetreten (fehlende Fehlerinformation): ex_type=%s, ex_value=%s" ################################################# kleinanzeigen_bot/utils/dicts.py: diff --git a/src/kleinanzeigen_bot/utils/error_handlers.py b/src/kleinanzeigen_bot/utils/error_handlers.py index 6867b74..87c9e85 100644 --- a/src/kleinanzeigen_bot/utils/error_handlers.py +++ b/src/kleinanzeigen_bot/utils/error_handlers.py @@ -5,14 +5,18 @@ SPDX-ArtifactOfProjectHomePage: https://github.com/Second-Hand-Friends/kleinanze """ import sys, traceback from types import FrameType, TracebackType -from typing import Any, Final +from typing import Final from . import loggers LOG:Final[loggers.Logger] = loggers.get_logger(__name__) -def on_exception(ex_type:type[BaseException], ex_value:Any, ex_traceback:TracebackType | None) -> None: +def on_exception(ex_type: type[BaseException] | None, ex_value: BaseException | None, ex_traceback: TracebackType | None) -> None: + if ex_type is None or ex_value is None: + LOG.error("Unknown exception occurred (missing exception info): ex_type=%s, ex_value=%s", ex_type, ex_value) + return + if issubclass(ex_type, KeyboardInterrupt): sys.__excepthook__(ex_type, ex_value, ex_traceback) elif loggers.is_debug(LOG) or isinstance(ex_value, (AttributeError, ImportError, NameError, TypeError)):