Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to capture any traceback generated by a Python application?

Tags:

python

I've been searching google for a way to somehow capture any traceback generated by a Python application.

I'd like to send an email/slack/notification to myself if any error occurs which generates a traceback (instead of relying on users to report issues to me).

I still haven't found anything which doesn't involve you doing a try/except. But of course I can't put everything I do inside individual try/except clauses since I'm writing applications which launch a UI (PySide/PyQt4/PySide2/PyQt5) and could error on user interaction.

Is this possible, and if so how can I capture any traceback generated?

like image 611
fredrik Avatar asked Jun 23 '26 02:06

fredrik


1 Answers

You can easily do it by creating custom sys.excepthook:

import sys
import traceback


def report_exception(exc_type, exc_value, exc_tb):
    # just a placeholder, you may send an e-mail here
    print("Type", exc_type)
    print("Value", exc_value)
    print("Tb", ''.join(traceback.format_tb(exc_tb)))


def custom_excepthook(exc_type, exc_value, exc_tb):
    report_exception(exc_type, exc_value, exc_tb)
    sys.__excepthook__(exc_type, exc_value, exc_tb)  # run standard exception hook


sys.excepthook = custom_excepthook

raise RuntimeError("I want to report exception here...")

For pretty-printing traceback objects refer to traceback module.

like image 106
Łukasz Rogalski Avatar answered Jun 24 '26 18:06

Łukasz Rogalski