How can I get the traceback object ( sys.exc_info()[2] , same as sys.exc_traceback ) as a string?
11,393
Use traceback.format_tb()
instead of print_tb()
to get the formatted stack trace (as a list of lines):
error['traceback'] = ''.join(traceback.format_tb(error_traceback))
print_tb()
directly prints the traceback, that's why you get None
as a result (that's the default for any Python function that doesn't return anything explicitely).
Author by
mulllhausen
javascript, python, php, mysql, html, css, delphi, bash, c#, mssql
Updated on June 16, 2022Comments
-
mulllhausen almost 2 years
I have a function which catches all exceptions, and I want to be able to get the traceback as a string within this function.
So far this is not working:
def handle_errors(error_type, error_message, error_traceback): """catch errors""" import traceback error = {} error['type'] = error_type.__name__ error['message'] = str(error_message) error['file'] = os.path.split(error_traceback.tb_frame.f_code.co_filename)[1] error['line'] = error_traceback.tb_lineno error['traceback'] = repr(traceback.print_tb(error_traceback)) ### finalise error handling and exit ### sys.excepthook = handle_errors
It's the
error['traceback']
line which is wrong. Do i even need to use thetraceback
module?As per this other vaguely similar question, I have tried:
error['traceback'] = repr(error_traceback.print_exc())
...but this gives an error:
Error in sys.excepthook: Traceback (most recent call last): File "xxxxxxxxxxx", line 54, in handle_errors error['traceback'] = repr(error_traceback.print_exc()) AttributeError: 'traceback' object has no attribute 'print_exc'
-
eyquem over 10 yearsYour answer led me to the precise solution.
-
andyn over 7 yearsThis does not work due to reasons pointed out by Lukas G. in the accepted answer that was posted earlier than yours.