How to format traceback objects in Python
Asked Answered
B

5

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?

Blandish answered 4/9, 2009 at 12:19 Comment(0)
J
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.

Jewett answered 4/9, 2009 at 12:24 Comment(2)
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.Turro
@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.Cowman
C
9

Have you tried traceback.print_tb or traceback.format_tb?

Coquette answered 4/9, 2009 at 12:25 Comment(0)
J
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

Jadwigajae answered 27/6, 2021 at 2:39 Comment(0)
Y
4

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

Yevetteyew answered 4/9, 2009 at 12:25 Comment(0)
D
-1

See also traceback.print_exc()

Donne answered 4/9, 2021 at 13:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.