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.
The printStackTrace() method of Java. lang. Throwable class used to print this Throwable along with other details like class name and line number where the exception occurred means its backtrace. This method prints a stack trace for this Throwable object on the standard error output stream.
To catch and print an exception that occurred in a code snippet, wrap it in an indented try block, followed by the command "except Exception as e" that catches the exception and saves its error message in string variable e . You can now print the error message with "print(e)" or use it for further processing.
Print Stack Trace in Python Using traceback Module The traceback. format_exc() method returns a string that contains the information about exception and stack trace entries from the traceback object. We can use the format_exc() method to print the stack trace with the try and except statements.
A trace of the method calls is called a stack trace. The stack trace listing provides a way to follow the call stack to the line number in the method where the exception occurs. The StackTrace property returns the frames of the call stack that originate at the location where the exception was thrown.
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With