36

I have a traceback object that I want to show in the nice format I get when calling traceback.format_exc().

Is there a builtin function for this? Or a few lines of code?

5 Answers 5

39

format_exc() is really just

etype, value, tb = sys.exc_info()
return ''.join(format_exception(etype, value, tb, limit))

So if you have the exception type, value, and traceback ready, it should be easy. If you have just the exception, notice that format_exception() is essentially:

a_list = ['Traceback (most recent call last):\n']
a_list = a_list + format_tb(tb, limit)

where limit defaults to None.


Example:

To further aid in clarifying a (simple) application of format_exc():

import traceback

try:
    # Some code
except Exception:
    print('\nThe following error occurred:\n',
          traceback.format_exc(),
          'Processing aborted.\n',
          sep='\n')
    # sys.exit(1)
Sign up to request clarification or add additional context in comments.

2 Comments

I think I'm the only one that doesn't understand this answer... This answer doesn't say where to import format_tb, and is using the built in list as a variable. And I still don't understand how to print the traceback.
@NicScozzaro - I update the answer so that it doesn't use list. Also format_tb() is part of the traceback module. You can simply from traceback import format_tb and then use it.
9

Have you tried traceback.print_tb or traceback.format_tb?

Comments

7

Couldn't find this anywhere, so I'm posting it here for future people and my future self.

try:
  raise Exception('Not an Exception')
except Exception as err:
  msg = "".join(traceback.format_exception(type(err), err, err.__traceback__))
  print(msg)

This takes your exception and provides a string formatted identically to python's default exception printer/print_tb

Comments

4

traceback docs give few examples and whole set of functions for formatting traceback objects.

Comments

-1

See also traceback.print_exc()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.