3

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?

1
  • You could parse the logs which would detect an exception and send you an email. Or, you can try using sentry pypi.python.org/pypi/sentry? Commented Oct 2, 2016 at 9:04

1 Answer 1

4

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.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.