traceback.rst 10.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
:mod:`traceback` --- Print or retrieve a stack traceback
========================================================

.. module:: traceback
   :synopsis: Print or retrieve a stack traceback.


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.

.. index:: object: traceback

The module uses traceback objects --- this is the object type that is stored in
17
the :data:`sys.last_traceback` variable and returned as the third item from
18 19 20 21 22
:func:`sys.exc_info`.

The module defines the following functions:


23
.. function:: print_tb(traceback, limit=None, file=None)
24 25 26 27 28 29 30

   Print up to *limit* stack trace entries from *traceback*.  If *limit* is omitted
   or ``None``, all entries are printed. If *file* is omitted or ``None``, the
   output goes to ``sys.stderr``; otherwise it should be an open file or file-like
   object to receive the output.


31
.. function:: print_exception(type, value, traceback, limit=None, file=None, chain=True)
32 33

   Print exception information and up to *limit* stack trace entries from
34 35
   *traceback* to *file*. This differs from :func:`print_tb` in the following
   ways:
36

37 38 39 40 41 42
   * if *traceback* is not ``None``, it prints a header ``Traceback (most recent
     call last):``
   * it prints the exception *type* and *value* after the stack trace
   * if *type* is :exc:`SyntaxError` and *value* has the appropriate format, it
     prints the line where the syntax error occurred with a caret indicating the
     approximate position of the error.
43

44 45 46 47
   If *chain* is true (the default), then chained exceptions (the
   :attr:`__cause__` or :attr:`__context__` attributes of the exception) will be
   printed as well, like the interpreter itself does when printing an unhandled
   exception.
48 49


50
.. function:: print_exc(limit=None, file=None, chain=True)
51

52
   This is a shorthand for ``print_exception(*sys.exc_info())``.
53 54


55
.. function:: print_last(limit=None, file=None, chain=True)
56 57

   This is a shorthand for ``print_exception(sys.last_type, sys.last_value,
58 59
   sys.last_traceback, limit, file)``.  In general it will work only after
   an exception has reached an interactive prompt (see :data:`sys.last_type`).
60 61


62
.. function:: print_stack(f=None, limit=None, file=None)
63 64 65 66 67 68 69

   This function prints a stack trace from its invocation point.  The optional *f*
   argument can be used to specify an alternate stack frame to start.  The optional
   *limit* and *file* arguments have the same meaning as for
   :func:`print_exception`.


70
.. function:: extract_tb(traceback, limit=None)
71 72 73 74

   Return a list of up to *limit* "pre-processed" stack trace entries extracted
   from the traceback object *traceback*.  It is useful for alternate formatting of
   stack traces.  If *limit* is omitted or ``None``, all entries are extracted.  A
75
   "pre-processed" stack trace entry is a 4-tuple (*filename*, *line number*,
76 77 78 79 80
   *function name*, *text*) representing the information that is usually printed
   for a stack trace.  The *text* is a string with leading and trailing whitespace
   stripped; if the source is not available it is ``None``.


81
.. function:: extract_stack(f=None, limit=None)
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107

   Extract the raw traceback from the current stack frame.  The return value has
   the same format as for :func:`extract_tb`.  The optional *f* and *limit*
   arguments have the same meaning as for :func:`print_stack`.


.. function:: format_list(list)

   Given a list of tuples as returned by :func:`extract_tb` or
   :func:`extract_stack`, return a list of strings ready for printing.  Each string
   in the resulting list corresponds to the item with the same index in the
   argument list.  Each string ends in a newline; the strings may contain internal
   newlines as well, for those items whose source text line is not ``None``.


.. function:: format_exception_only(type, value)

   Format the exception part of a traceback.  The arguments are the exception type
   and value such as given by ``sys.last_type`` and ``sys.last_value``.  The return
   value is a list of strings, each ending in a newline.  Normally, the list
   contains a single string; however, for :exc:`SyntaxError` exceptions, it
   contains several lines that (when printed) display detailed information about
   where the syntax error occurred.  The message indicating which exception
   occurred is the always last string in the list.


108
.. function:: format_exception(type, value, tb, limit=None, chain=True)
109 110 111 112 113 114 115 116

   Format a stack trace and the exception information.  The arguments  have the
   same meaning as the corresponding arguments to :func:`print_exception`.  The
   return value is a list of strings, each ending in a newline and some containing
   internal newlines.  When these lines are concatenated and printed, exactly the
   same text is printed as does :func:`print_exception`.


117
.. function:: format_exc(limit=None, chain=True)
118 119 120 121 122

   This is like ``print_exc(limit)`` but returns a string instead of printing to a
   file.


123
.. function:: format_tb(tb, limit=None)
124 125 126 127

   A shorthand for ``format_list(extract_tb(tb, limit))``.


128
.. function:: format_stack(f=None, limit=None)
129 130 131

   A shorthand for ``format_list(extract_stack(f, limit))``.

132 133 134 135 136 137 138
.. function:: clear_frames(tb)

   Clears the local variables of all the stack frames in a traceback *tb*
   by calling the :meth:`clear` method of each frame object.

   .. versionadded:: 3.4

139 140 141

.. _traceback-example:

142 143
Traceback Examples
------------------
144 145 146 147 148 149 150 151 152

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 :mod:`code`
module. ::

   import sys, traceback

   def run_user_code(envdir):
153
       source = input(">>> ")
154 155
       try:
           exec(source, envdir)
156
       except Exception:
157 158
           print("Exception in user code:")
           print("-"*60)
159
           traceback.print_exc(file=sys.stdout)
160
           print("-"*60)
161 162

   envdir = {}
163
   while True:
164 165
       run_user_code(envdir)

166 167

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

.. testcode::
171 172 173 174 175

   import sys, traceback

   def lumberjack():
       bright_side_of_death()
176

177 178
   def bright_side_of_death():
       return tuple()[0]
179

180 181
   try:
       lumberjack()
182 183
   except IndexError:
       exc_type, exc_value, exc_traceback = sys.exc_info()
184
       print("*** print_tb:")
185
       traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
186
       print("*** print_exception:")
187
       traceback.print_exception(exc_type, exc_value, exc_traceback,
188
                                 limit=2, file=sys.stdout)
189
       print("*** print_exc:")
190
       traceback.print_exc()
191
       print("*** format_exc, first and last line:")
192
       formatted_lines = traceback.format_exc().splitlines()
193 194 195
       print(formatted_lines[0])
       print(formatted_lines[-1])
       print("*** format_exception:")
196 197
       print(repr(traceback.format_exception(exc_type, exc_value,
                                             exc_traceback)))
198
       print("*** extract_tb:")
199
       print(repr(traceback.extract_tb(exc_traceback)))
200
       print("*** format_tb:")
201 202
       print(repr(traceback.format_tb(exc_traceback)))
       print("*** tb_lineno:", exc_traceback.tb_lineno)
203

204
The output for the example would look similar to this:
205

206 207
.. testoutput::
   :options: +NORMALIZE_WHITESPACE
208 209

   *** print_tb:
210
     File "<doctest...>", line 10, in <module>
211 212 213
       lumberjack()
   *** print_exception:
   Traceback (most recent call last):
214
     File "<doctest...>", line 10, in <module>
215
       lumberjack()
216
     File "<doctest...>", line 4, in lumberjack
217 218 219 220
       bright_side_of_death()
   IndexError: tuple index out of range
   *** print_exc:
   Traceback (most recent call last):
221
     File "<doctest...>", line 10, in <module>
222
       lumberjack()
223
     File "<doctest...>", line 4, in lumberjack
224 225 226 227 228 229 230
       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',
231 232 233
    '  File "<doctest...>", line 10, in <module>\n    lumberjack()\n',
    '  File "<doctest...>", line 4, in lumberjack\n    bright_side_of_death()\n',
    '  File "<doctest...>", line 7, in bright_side_of_death\n    return tuple()[0]\n',
234 235
    'IndexError: tuple index out of range\n']
   *** extract_tb:
236 237
   [('<doctest...>', 10, '<module>', 'lumberjack()'),
    ('<doctest...>', 4, 'lumberjack', 'bright_side_of_death()'),
Benjamin Peterson's avatar
Benjamin Peterson committed
238
    ('<doctest...>', 7, 'bright_side_of_death', 'return tuple()[0]')]
239
   *** format_tb:
240 241 242 243
   ['  File "<doctest...>", line 10, in <module>\n    lumberjack()\n',
    '  File "<doctest...>", line 4, in lumberjack\n    bright_side_of_death()\n',
    '  File "<doctest...>", line 7, in bright_side_of_death\n    return tuple()[0]\n']
   *** tb_lineno: 10
244 245 246 247 248 249 250


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

   >>> import traceback
   >>> def another_function():
   ...     lumberstack()
251
   ...
252 253
   >>> def lumberstack():
   ...     traceback.print_stack()
254 255
   ...     print(repr(traceback.extract_stack()))
   ...     print(repr(traceback.format_stack()))
256
   ...
257 258 259 260 261 262 263 264 265
   >>> 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()'),
266
    ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')]
267 268
   ['  File "<doctest>", line 10, in <module>\n    another_function()\n',
    '  File "<doctest>", line 3, in another_function\n    lumberstack()\n',
269
    '  File "<doctest>", line 8, in lumberstack\n    print(repr(traceback.format_stack()))\n']
270 271


272 273 274 275
This last example demonstrates the final few formatting functions:

.. doctest::
   :options: +NORMALIZE_WHITESPACE
276 277

   >>> import traceback
278 279
   >>> traceback.format_list([('spam.py', 3, '<module>', 'spam.eggs()'),
   ...                        ('eggs.py', 42, 'eggs', 'return "bacon"')])
280 281
   ['  File "spam.py", line 3, in <module>\n    spam.eggs()\n',
    '  File "eggs.py", line 42, in eggs\n    return "bacon"\n']
282 283
   >>> an_error = IndexError('tuple index out of range')
   >>> traceback.format_exception_only(type(an_error), an_error)
284
   ['IndexError: tuple index out of range\n']