Dims
Dims

Reputation: 51039

How to print the stack trace of an exception object in Python?

How to print the stack trace of an exception object in Python?

Note that the question is NOT about printing stack trace of LAST exception. Exception object may be saved at some distant point of time in the past.

Upvotes: 33

Views: 23522

Answers (2)

Jean-François Fabre
Jean-François Fabre

Reputation: 140178

you can manually iterate through the __traceback__ attribute to print lines & files:

def function():
    raise ValueError("flfkl")

try:
    function()
except Exception as e:
    traceback = e.__traceback__
    while traceback:
        print("{}: {}".format(traceback.tb_frame.f_code.co_filename,traceback.tb_lineno))
        traceback = traceback.tb_next

Upvotes: 4

Aran-Fey
Aran-Fey

Reputation: 43166

It's a bit inconvenient, but you can use traceback.print_exception. Given an exception ex:

traceback.print_exception(type(ex), ex, ex.__traceback__)

Example:

import traceback

try:
    1/0
except Exception as ex:
    traceback.print_exception(type(ex), ex, ex.__traceback__)

# output:
# Traceback (most recent call last):
#   File "untitled.py", line 4, in <module>
#     1/0
# ZeroDivisionError: division by zero

Upvotes: 49

Related Questions