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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With