import traceback; traceback.print_tb(exception_instance.__traceback__)
In my daily work, I use pdb pretty heavily for debugging. There are some limitations to the pdb shell that are constant annoyances to me - one of which applies directly to my habit of sticking breakpoints in
try/except blocks. For example:
class ExistentialCrisis(Exception): pass def think_about_existence(): raise ExistentialCrisis("oblivion is inevitable") try: think_about_existence() except ExistentialCrisis as exc: import pdb; pdb.set_trace() # This is where we end up in pdb after running this code. raise
If we weren’t in pdb, we could solve this pretty easily:
... try: think_about_existence() except ExistentialCrisis as exc: import traceback traceback.print_exc() raise
And you can do the same
traceback.print_exc() in pdb if you use the interact command to drop into the current scope - but I inexplicably hate doing that.
How can you get the traceback from the exception object itself?
import traceback; traceback.print_tb(exc.__traceback__)