traceback — Print or retrieve a stack traceback — Python v3.0.1 documentation

This module provides a standard interface to extract, format and print stack traces of Python programs. It exactly mimics the behavior of the Python interpreter when it prints a stack trace. This is useful when you want to print stack traces under program control, such as in a “wrapper” around the interpreter.

The module uses traceback objects — this is the object type that is stored in the sys.last_traceback variable and returned as the third item from sys.exc_info().

Traceback Examples

This simple example implements a basic read-eval-print loop, similar to (but less useful than) the standard Python interactive interpreter loop. For a more complete implementation of the interpreter loop, refer to the code module.

import sys, traceback

def run_user_code(envdir):
    source = input(">>> ")
    try:
        exec(source, envdir)
    except:
        print("Exception in user code:")
        print("-"*60)
        traceback.print_exc(file=sys.stdout)
        print("-"*60)

envdir = {}
while True:
    run_user_code(envdir)

The following example demonstrates the different ways to print and format the exception and traceback:

import sys, traceback

def lumberjack():
    bright_side_of_death()

def bright_side_of_death():
    return tuple()[0]

try:
    lumberjack()
except:
    exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
    print("*** print_tb:")
    traceback.print_tb(exceptionTraceback, limit=1, file=sys.stdout)
    print("*** print_exception:")
    traceback.print_exception(exceptionType, exceptionValue, exceptionTraceback,
                              limit=2, file=sys.stdout)
    print("*** print_exc:")
    traceback.print_exc()
    print("*** format_exc, first and last line:")
    formatted_lines = traceback.format_exc().splitlines()
    print(formatted_lines[0])
    print(formatted_lines[-1])
    print("*** format_exception:")
    print(repr(traceback.format_exception(exceptionType, exceptionValue,
                                          exceptionTraceback)))
    print("*** extract_tb:")
    print(repr(traceback.extract_tb(exceptionTraceback)))
    print("*** format_tb:")
    print(repr(traceback.format_tb(exceptionTraceback)))
    print("*** tb_lineno:", traceback.tb_lineno(exceptionTraceback))
print("*** print_last:")
traceback.print_last()

The output for the example would look similar to this:

*** print_tb:
  File "<doctest>", line 9, in <module>
    lumberjack()
*** print_exception:
Traceback (most recent call last):
  File "<doctest>", line 9, in <module>
    lumberjack()
  File "<doctest>", line 3, in lumberjack
    bright_side_of_death()
IndexError: tuple index out of range
*** print_exc:
Traceback (most recent call last):
  File "<doctest>", line 9, in <module>
    lumberjack()
  File "<doctest>", line 3, in lumberjack
    bright_side_of_death()
IndexError: tuple index out of range
*** format_exc, first and last line:
Traceback (most recent call last):
IndexError: tuple index out of range
*** format_exception:
['Traceback (most recent call last):\n',
 '  File "<doctest>", line 9, in <module>\n    lumberjack()\n',
 '  File "<doctest>", line 3, in lumberjack\n    bright_side_of_death()\n',
 '  File "<doctest>", line 6, in bright_side_of_death\n    return tuple()[0]\n',
 'IndexError: tuple index out of range\n']
*** extract_tb:
[('<doctest>', 9, '<module>', 'lumberjack()'),
 ('<doctest>', 3, 'lumberjack', 'bright_side_of_death()'),
 ('<doctest>', 6, 'bright_side_of_death', 'return tuple()[0]')]
*** format_tb:
['  File "<doctest>", line 9, in <module>\n    lumberjack()\n',
 '  File "<doctest>", line 3, in lumberjack\n    bright_side_of_death()\n',
 '  File "<doctest>", line 6, in bright_side_of_death\n    return tuple()[0]\n']
*** tb_lineno: 2
*** print_last:
Traceback (most recent call last):
  File "<doctest>", line 9, in <module>
    lumberjack()
  File "<doctest>", line 3, in lumberjack
    bright_side_of_death()
IndexError: tuple index out of range

The following example shows the different ways to print and format the stack:

>>> import traceback
>>> def another_function():
...     lumberstack()
...
>>> def lumberstack():
...     traceback.print_stack()
...     print(repr(traceback.extract_stack()))
...     print(repr(traceback.format_stack()))
...
>>> another_function()
  File "<doctest>", line 10, in <module>
    another_function()
  File "<doctest>", line 3, in another_function
    lumberstack()
  File "<doctest>", line 6, in lumberstack
    traceback.print_stack()
[('<doctest>', 10, '<module>', 'another_function()'),
 ('<doctest>', 3, 'another_function', 'lumberstack()'),
 ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')]
['  File "<doctest>", line 10, in <module>\n    another_function()\n',
 '  File "<doctest>", line 3, in another_function\n    lumberstack()\n',
 '  File "<doctest>", line 8, in lumberstack\n    print(repr(traceback.format_stack()))\n']

This last example demonstrates the final few formatting functions:

>>> import traceback
>>> format_list([('spam.py', 3, '<module>', 'spam.eggs()'),
...              ('eggs.py', 42, 'eggs', 'return "bacon"')])
['  File "spam.py", line 3, in <module>\n    spam.eggs()\n',
 '  File "eggs.py", line 42, in eggs\n    return "bacon"\n']
>>> theError = IndexError('tuple indx out of range')
>>> traceback.format_exception_only(type(theError), theError)
['IndexError: tuple index out of range\n']