blob: a21ef8ed9f369378aeb3151fe22c4f3b3188440c [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`traceback` --- Print or retrieve a stack traceback
2========================================================
3
4.. module:: traceback
5 :synopsis: Print or retrieve a stack traceback.
6
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04007**Source code:** :source:`Lib/traceback.py`
8
9--------------
Georg Brandl116aa622007-08-15 14:28:22 +000010
11This module provides a standard interface to extract, format and print stack
12traces of Python programs. It exactly mimics the behavior of the Python
13interpreter when it prints a stack trace. This is useful when you want to print
14stack traces under program control, such as in a "wrapper" around the
15interpreter.
16
17.. index:: object: traceback
18
19The module uses traceback objects --- this is the object type that is stored in
R. David Murraye02a3012009-04-27 18:38:19 +000020the :data:`sys.last_traceback` variable and returned as the third item from
Georg Brandl116aa622007-08-15 14:28:22 +000021:func:`sys.exc_info`.
22
23The module defines the following functions:
24
25
Senthil Kumarana82908f2016-01-15 21:45:17 -080026.. function:: print_tb(tb, limit=None, file=None)
Georg Brandl116aa622007-08-15 14:28:22 +000027
Senthil Kumarana82908f2016-01-15 21:45:17 -080028 Print up to *limit* stack trace entries from traceback object *tb* (starting
29 from the caller's frame) if *limit* is positive. Otherwise, print the last
30 ``abs(limit)`` entries. If *limit* is omitted or ``None``, all entries are
31 printed. If *file* is omitted or ``None``, the output goes to
32 ``sys.stderr``; otherwise it should be an open file or file-like object to
33 receive the output.
Serhiy Storchaka24559e42015-05-03 13:19:46 +030034
35 .. versionchanged:: 3.5
36 Added negative *limit* support.
Georg Brandl116aa622007-08-15 14:28:22 +000037
38
Senthil Kumarana82908f2016-01-15 21:45:17 -080039.. function:: print_exception(etype, value, tb, limit=None, file=None, chain=True)
Georg Brandl116aa622007-08-15 14:28:22 +000040
Senthil Kumarana82908f2016-01-15 21:45:17 -080041 Print exception information and stack trace entries from traceback object
42 *tb* to *file*. This differs from :func:`print_tb` in the following
Georg Brandl1aea30a2008-07-19 15:51:07 +000043 ways:
44
Senthil Kumarana82908f2016-01-15 21:45:17 -080045 * if *tb* is not ``None``, it prints a header ``Traceback (most recent
Georg Brandl1aea30a2008-07-19 15:51:07 +000046 call last):``
Serhiy Storchakaddb961d2018-10-26 09:00:49 +030047
Senthil Kumarana82908f2016-01-15 21:45:17 -080048 * it prints the exception *etype* and *value* after the stack trace
Serhiy Storchakaddb961d2018-10-26 09:00:49 +030049
50 .. index:: single: ^; caret
51
Matthias Bussonniercdb89cd2017-06-01 14:54:01 -070052 * if *type(value)* is :exc:`SyntaxError` and *value* has the appropriate
53 format, it prints the line where the syntax error occurred with a caret
54 indicating the approximate position of the error.
Georg Brandl1aea30a2008-07-19 15:51:07 +000055
Serhiy Storchaka24559e42015-05-03 13:19:46 +030056 The optional *limit* argument has the same meaning as for :func:`print_tb`.
Georg Brandl1aea30a2008-07-19 15:51:07 +000057 If *chain* is true (the default), then chained exceptions (the
58 :attr:`__cause__` or :attr:`__context__` attributes of the exception) will be
59 printed as well, like the interpreter itself does when printing an unhandled
60 exception.
Georg Brandl116aa622007-08-15 14:28:22 +000061
Matthias Bussonniercdb89cd2017-06-01 14:54:01 -070062 .. versionchanged:: 3.5
63 The *etype* argument is ignored and inferred from the type of *value*.
64
Georg Brandl116aa622007-08-15 14:28:22 +000065
Georg Brandl7f01a132009-09-16 15:58:14 +000066.. function:: print_exc(limit=None, file=None, chain=True)
Georg Brandl116aa622007-08-15 14:28:22 +000067
Serhiy Storchaka24559e42015-05-03 13:19:46 +030068 This is a shorthand for ``print_exception(*sys.exc_info(), limit, file,
69 chain)``.
Georg Brandl116aa622007-08-15 14:28:22 +000070
71
Georg Brandl7f01a132009-09-16 15:58:14 +000072.. function:: print_last(limit=None, file=None, chain=True)
Georg Brandl116aa622007-08-15 14:28:22 +000073
74 This is a shorthand for ``print_exception(sys.last_type, sys.last_value,
Serhiy Storchaka24559e42015-05-03 13:19:46 +030075 sys.last_traceback, limit, file, chain)``. In general it will work only
76 after an exception has reached an interactive prompt (see
77 :data:`sys.last_type`).
Georg Brandl116aa622007-08-15 14:28:22 +000078
79
Georg Brandl7f01a132009-09-16 15:58:14 +000080.. function:: print_stack(f=None, limit=None, file=None)
Georg Brandl116aa622007-08-15 14:28:22 +000081
Serhiy Storchaka24559e42015-05-03 13:19:46 +030082 Print up to *limit* stack trace entries (starting from the invocation
83 point) if *limit* is positive. Otherwise, print the last ``abs(limit)``
84 entries. If *limit* is omitted or ``None``, all entries are printed.
85 The optional *f* argument can be used to specify an alternate stack frame
86 to start. The optional *file* argument has the same meaning as for
87 :func:`print_tb`.
88
89 .. versionchanged:: 3.5
90 Added negative *limit* support.
Georg Brandl116aa622007-08-15 14:28:22 +000091
92
Senthil Kumarana82908f2016-01-15 21:45:17 -080093.. function:: extract_tb(tb, limit=None)
Georg Brandl116aa622007-08-15 14:28:22 +000094
torsavaf394ee52018-08-02 17:08:59 +010095 Return a :class:`StackSummary` object representing a list of "pre-processed"
96 stack trace entries extracted from the traceback object *tb*. It is useful
97 for alternate formatting of stack traces. The optional *limit* argument has
98 the same meaning as for :func:`print_tb`. A "pre-processed" stack trace
99 entry is a :class:`FrameSummary` object containing attributes
100 :attr:`~FrameSummary.filename`, :attr:`~FrameSummary.lineno`,
101 :attr:`~FrameSummary.name`, and :attr:`~FrameSummary.line` representing the
102 information that is usually printed for a stack trace. The
103 :attr:`~FrameSummary.line` is a string with leading and trailing
104 whitespace stripped; if the source is not available it is ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000105
106
Georg Brandl7f01a132009-09-16 15:58:14 +0000107.. function:: extract_stack(f=None, limit=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000108
109 Extract the raw traceback from the current stack frame. The return value has
110 the same format as for :func:`extract_tb`. The optional *f* and *limit*
111 arguments have the same meaning as for :func:`print_stack`.
112
113
Senthil Kumarana82908f2016-01-15 21:45:17 -0800114.. function:: format_list(extracted_list)
Georg Brandl116aa622007-08-15 14:28:22 +0000115
torsavaf394ee52018-08-02 17:08:59 +0100116 Given a list of tuples or :class:`FrameSummary` objects as returned by
117 :func:`extract_tb` or :func:`extract_stack`, return a list of strings ready
118 for printing. Each string in the resulting list corresponds to the item with
119 the same index in the argument list. Each string ends in a newline; the
120 strings may contain internal newlines as well, for those items whose source
121 text line is not ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000122
123
Senthil Kumarana82908f2016-01-15 21:45:17 -0800124.. function:: format_exception_only(etype, value)
Georg Brandl116aa622007-08-15 14:28:22 +0000125
Senthil Kumarana82908f2016-01-15 21:45:17 -0800126 Format the exception part of a traceback. The arguments are the exception
127 type and value such as given by ``sys.last_type`` and ``sys.last_value``.
128 The return value is a list of strings, each ending in a newline. Normally,
129 the list contains a single string; however, for :exc:`SyntaxError`
130 exceptions, it contains several lines that (when printed) display detailed
131 information about where the syntax error occurred. The message indicating
132 which exception occurred is the always last string in the list.
Georg Brandl116aa622007-08-15 14:28:22 +0000133
134
Senthil Kumarana82908f2016-01-15 21:45:17 -0800135.. function:: format_exception(etype, value, tb, limit=None, chain=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000136
137 Format a stack trace and the exception information. The arguments have the
138 same meaning as the corresponding arguments to :func:`print_exception`. The
Senthil Kumarana82908f2016-01-15 21:45:17 -0800139 return value is a list of strings, each ending in a newline and some
140 containing internal newlines. When these lines are concatenated and printed,
141 exactly the same text is printed as does :func:`print_exception`.
Georg Brandl116aa622007-08-15 14:28:22 +0000142
Matthias Bussonniercdb89cd2017-06-01 14:54:01 -0700143 .. versionchanged:: 3.5
144 The *etype* argument is ignored and inferred from the type of *value*.
145
Georg Brandl116aa622007-08-15 14:28:22 +0000146
Georg Brandl7f01a132009-09-16 15:58:14 +0000147.. function:: format_exc(limit=None, chain=True)
Georg Brandl1aea30a2008-07-19 15:51:07 +0000148
Senthil Kumarana82908f2016-01-15 21:45:17 -0800149 This is like ``print_exc(limit)`` but returns a string instead of printing to
150 a file.
Georg Brandl1aea30a2008-07-19 15:51:07 +0000151
152
Georg Brandl7f01a132009-09-16 15:58:14 +0000153.. function:: format_tb(tb, limit=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000154
155 A shorthand for ``format_list(extract_tb(tb, limit))``.
156
157
Georg Brandl7f01a132009-09-16 15:58:14 +0000158.. function:: format_stack(f=None, limit=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000159
160 A shorthand for ``format_list(extract_stack(f, limit))``.
161
Andrew Kuchling173a1572013-09-15 18:15:56 -0400162.. function:: clear_frames(tb)
163
164 Clears the local variables of all the stack frames in a traceback *tb*
165 by calling the :meth:`clear` method of each frame object.
166
167 .. versionadded:: 3.4
168
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300169.. function:: walk_stack(f)
170
Berker Peksag49f373b2015-03-06 12:18:06 +0200171 Walk a stack following ``f.f_back`` from the given frame, yielding the frame
172 and line number for each frame. If *f* is ``None``, the current stack is
173 used. This helper is used with :meth:`StackSummary.extract`.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300174
175 .. versionadded:: 3.5
176
177.. function:: walk_tb(tb)
178
Berker Peksag49f373b2015-03-06 12:18:06 +0200179 Walk a traceback following ``tb_next`` yielding the frame and line number
180 for each frame. This helper is used with :meth:`StackSummary.extract`.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300181
182 .. versionadded:: 3.5
183
184The module also defines the following classes:
185
186:class:`TracebackException` Objects
187-----------------------------------
188
Berker Peksag49f373b2015-03-06 12:18:06 +0200189.. versionadded:: 3.5
190
191:class:`TracebackException` objects are created from actual exceptions to
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300192capture data for later printing in a lightweight fashion.
193
Robert Collinsd7c7e0e2015-03-05 20:28:52 +1300194.. class:: TracebackException(exc_type, exc_value, exc_traceback, *, limit=None, lookup_lines=True, capture_locals=False)
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300195
Berker Peksag49f373b2015-03-06 12:18:06 +0200196 Capture an exception for later rendering. *limit*, *lookup_lines* and
197 *capture_locals* are as for the :class:`StackSummary` class.
Robert Collinsd7c7e0e2015-03-05 20:28:52 +1300198
199 Note that when locals are captured, they are also shown in the traceback.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300200
Berker Peksag49f373b2015-03-06 12:18:06 +0200201 .. attribute:: __cause__
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300202
Berker Peksag49f373b2015-03-06 12:18:06 +0200203 A :class:`TracebackException` of the original ``__cause__``.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300204
Berker Peksag49f373b2015-03-06 12:18:06 +0200205 .. attribute:: __context__
Robert Collinsd7c7e0e2015-03-05 20:28:52 +1300206
Berker Peksag49f373b2015-03-06 12:18:06 +0200207 A :class:`TracebackException` of the original ``__context__``.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300208
Berker Peksag49f373b2015-03-06 12:18:06 +0200209 .. attribute:: __suppress_context__
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300210
Berker Peksag49f373b2015-03-06 12:18:06 +0200211 The ``__suppress_context__`` value from the original exception.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300212
Berker Peksag49f373b2015-03-06 12:18:06 +0200213 .. attribute:: stack
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300214
Berker Peksag49f373b2015-03-06 12:18:06 +0200215 A :class:`StackSummary` representing the traceback.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300216
Berker Peksag49f373b2015-03-06 12:18:06 +0200217 .. attribute:: exc_type
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300218
Berker Peksag49f373b2015-03-06 12:18:06 +0200219 The class of the original traceback.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300220
Berker Peksag49f373b2015-03-06 12:18:06 +0200221 .. attribute:: filename
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300222
Berker Peksag49f373b2015-03-06 12:18:06 +0200223 For syntax errors - the file name where the error occurred.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300224
Berker Peksag49f373b2015-03-06 12:18:06 +0200225 .. attribute:: lineno
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300226
Berker Peksag49f373b2015-03-06 12:18:06 +0200227 For syntax errors - the line number where the error occurred.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300228
Berker Peksag49f373b2015-03-06 12:18:06 +0200229 .. attribute:: text
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300230
Berker Peksag49f373b2015-03-06 12:18:06 +0200231 For syntax errors - the text where the error occurred.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300232
Berker Peksag49f373b2015-03-06 12:18:06 +0200233 .. attribute:: offset
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300234
Berker Peksag49f373b2015-03-06 12:18:06 +0200235 For syntax errors - the offset into the text where the error occurred.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300236
Berker Peksag49f373b2015-03-06 12:18:06 +0200237 .. attribute:: msg
238
239 For syntax errors - the compiler error message.
240
241 .. classmethod:: from_exception(exc, *, limit=None, lookup_lines=True, capture_locals=False)
242
243 Capture an exception for later rendering. *limit*, *lookup_lines* and
244 *capture_locals* are as for the :class:`StackSummary` class.
245
246 Note that when locals are captured, they are also shown in the traceback.
247
248 .. method:: format(*, chain=True)
249
250 Format the exception.
251
252 If *chain* is not ``True``, ``__cause__`` and ``__context__`` will not
253 be formatted.
254
255 The return value is a generator of strings, each ending in a newline and
256 some containing internal newlines. :func:`~traceback.print_exception`
257 is a wrapper around this method which just prints the lines to a file.
258
259 The message indicating which exception occurred is always the last
260 string in the output.
261
262 .. method:: format_exception_only()
263
264 Format the exception part of the traceback.
265
266 The return value is a generator of strings, each ending in a newline.
267
268 Normally, the generator emits a single string; however, for
269 :exc:`SyntaxError` exceptions, it emits several lines that (when
270 printed) display detailed information about where the syntax
271 error occurred.
272
273 The message indicating which exception occurred is always the last
274 string in the output.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300275
276
277:class:`StackSummary` Objects
278-----------------------------
279
Berker Peksag49f373b2015-03-06 12:18:06 +0200280.. versionadded:: 3.5
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300281
Berker Peksag49f373b2015-03-06 12:18:06 +0200282:class:`StackSummary` objects represent a call stack ready for formatting.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300283
Berker Peksag49f373b2015-03-06 12:18:06 +0200284.. class:: StackSummary
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300285
Berker Peksag49f373b2015-03-06 12:18:06 +0200286 .. classmethod:: extract(frame_gen, *, limit=None, lookup_lines=True, capture_locals=False)
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300287
Berker Peksag49f373b2015-03-06 12:18:06 +0200288 Construct a :class:`StackSummary` object from a frame generator (such as
289 is returned by :func:`~traceback.walk_stack` or
290 :func:`~traceback.walk_tb`).
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300291
Berker Peksag49f373b2015-03-06 12:18:06 +0200292 If *limit* is supplied, only this many frames are taken from *frame_gen*.
293 If *lookup_lines* is ``False``, the returned :class:`FrameSummary`
294 objects will not have read their lines in yet, making the cost of
295 creating the :class:`StackSummary` cheaper (which may be valuable if it
296 may not actually get formatted). If *capture_locals* is ``True`` the
297 local variables in each :class:`FrameSummary` are captured as object
298 representations.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300299
Berker Peksag49f373b2015-03-06 12:18:06 +0200300 .. classmethod:: from_list(a_list)
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300301
torsavaf394ee52018-08-02 17:08:59 +0100302 Construct a :class:`StackSummary` object from a supplied list of
303 :class:`FrameSummary` objects or old-style list of tuples. Each tuple
304 should be a 4-tuple with filename, lineno, name, line as the elements.
Berker Peksag49f373b2015-03-06 12:18:06 +0200305
Nick Coghland0034232016-08-15 13:11:34 +1000306 .. method:: format()
307
308 Returns a list of strings ready for printing. Each string in the
309 resulting list corresponds to a single frame from the stack.
310 Each string ends in a newline; the strings may contain internal
311 newlines as well, for those items with source text lines.
312
313 For long sequences of the same frame and line, the first few
314 repetitions are shown, followed by a summary line stating the exact
315 number of further repetitions.
316
Nick Coghlan02d03df2016-08-16 10:58:14 +1000317 .. versionchanged:: 3.6
318 Long sequences of repeated frames are now abbreviated.
Nick Coghland0034232016-08-15 13:11:34 +1000319
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300320
321:class:`FrameSummary` Objects
322-----------------------------
323
Berker Peksag49f373b2015-03-06 12:18:06 +0200324.. versionadded:: 3.5
325
326:class:`FrameSummary` objects represent a single frame in a traceback.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300327
328.. class:: FrameSummary(filename, lineno, name, lookup_line=True, locals=None, line=None)
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300329
330 Represent a single frame in the traceback or stack that is being formatted
331 or printed. It may optionally have a stringified version of the frames
Berker Peksag49f373b2015-03-06 12:18:06 +0200332 locals included in it. If *lookup_line* is ``False``, the source code is not
333 looked up until the :class:`FrameSummary` has the :attr:`~FrameSummary.line`
334 attribute accessed (which also happens when casting it to a tuple).
335 :attr:`~FrameSummary.line` may be directly provided, and will prevent line
336 lookups happening at all. *locals* is an optional local variable
337 dictionary, and if supplied the variable representations are stored in the
338 summary for later display.
Georg Brandl116aa622007-08-15 14:28:22 +0000339
Georg Brandl116aa622007-08-15 14:28:22 +0000340.. _traceback-example:
341
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000342Traceback Examples
343------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000344
345This simple example implements a basic read-eval-print loop, similar to (but
346less useful than) the standard Python interactive interpreter loop. For a more
347complete implementation of the interpreter loop, refer to the :mod:`code`
348module. ::
349
350 import sys, traceback
351
352 def run_user_code(envdir):
Georg Brandl8d5c3922007-12-02 22:48:17 +0000353 source = input(">>> ")
Georg Brandl116aa622007-08-15 14:28:22 +0000354 try:
355 exec(source, envdir)
Andrew Svetlov47395612012-11-02 22:07:26 +0200356 except Exception:
Collin Winterc79461b2007-09-01 23:34:30 +0000357 print("Exception in user code:")
358 print("-"*60)
Georg Brandl116aa622007-08-15 14:28:22 +0000359 traceback.print_exc(file=sys.stdout)
Collin Winterc79461b2007-09-01 23:34:30 +0000360 print("-"*60)
Georg Brandl116aa622007-08-15 14:28:22 +0000361
362 envdir = {}
Collin Winterc79461b2007-09-01 23:34:30 +0000363 while True:
Georg Brandl116aa622007-08-15 14:28:22 +0000364 run_user_code(envdir)
365
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000366
367The following example demonstrates the different ways to print and format the
R. David Murraye02a3012009-04-27 18:38:19 +0000368exception and traceback:
369
370.. testcode::
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000371
372 import sys, traceback
373
374 def lumberjack():
375 bright_side_of_death()
Georg Brandl48310cd2009-01-03 21:18:54 +0000376
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000377 def bright_side_of_death():
378 return tuple()[0]
Georg Brandl48310cd2009-01-03 21:18:54 +0000379
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000380 try:
381 lumberjack()
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000382 except IndexError:
383 exc_type, exc_value, exc_traceback = sys.exc_info()
Georg Brandlf6945182008-02-01 11:56:49 +0000384 print("*** print_tb:")
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000385 traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
Georg Brandlf6945182008-02-01 11:56:49 +0000386 print("*** print_exception:")
Matthias Bussonniercdb89cd2017-06-01 14:54:01 -0700387 # exc_type below is ignored on 3.5 and later
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000388 traceback.print_exception(exc_type, exc_value, exc_traceback,
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000389 limit=2, file=sys.stdout)
Georg Brandlf6945182008-02-01 11:56:49 +0000390 print("*** print_exc:")
Zachary Warec90fccd2016-08-10 00:35:27 -0500391 traceback.print_exc(limit=2, file=sys.stdout)
Georg Brandlf6945182008-02-01 11:56:49 +0000392 print("*** format_exc, first and last line:")
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000393 formatted_lines = traceback.format_exc().splitlines()
Georg Brandlf6945182008-02-01 11:56:49 +0000394 print(formatted_lines[0])
395 print(formatted_lines[-1])
396 print("*** format_exception:")
Matthias Bussonniercdb89cd2017-06-01 14:54:01 -0700397 # exc_type below is ignored on 3.5 and later
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000398 print(repr(traceback.format_exception(exc_type, exc_value,
399 exc_traceback)))
Georg Brandlf6945182008-02-01 11:56:49 +0000400 print("*** extract_tb:")
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000401 print(repr(traceback.extract_tb(exc_traceback)))
Georg Brandlf6945182008-02-01 11:56:49 +0000402 print("*** format_tb:")
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000403 print(repr(traceback.format_tb(exc_traceback)))
404 print("*** tb_lineno:", exc_traceback.tb_lineno)
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000405
R. David Murraye02a3012009-04-27 18:38:19 +0000406The output for the example would look similar to this:
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000407
R. David Murraye02a3012009-04-27 18:38:19 +0000408.. testoutput::
409 :options: +NORMALIZE_WHITESPACE
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000410
411 *** print_tb:
R. David Murraye02a3012009-04-27 18:38:19 +0000412 File "<doctest...>", line 10, in <module>
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000413 lumberjack()
414 *** print_exception:
415 Traceback (most recent call last):
R. David Murraye02a3012009-04-27 18:38:19 +0000416 File "<doctest...>", line 10, in <module>
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000417 lumberjack()
R. David Murraye02a3012009-04-27 18:38:19 +0000418 File "<doctest...>", line 4, in lumberjack
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000419 bright_side_of_death()
420 IndexError: tuple index out of range
421 *** print_exc:
422 Traceback (most recent call last):
R. David Murraye02a3012009-04-27 18:38:19 +0000423 File "<doctest...>", line 10, in <module>
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000424 lumberjack()
R. David Murraye02a3012009-04-27 18:38:19 +0000425 File "<doctest...>", line 4, in lumberjack
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000426 bright_side_of_death()
427 IndexError: tuple index out of range
428 *** format_exc, first and last line:
429 Traceback (most recent call last):
430 IndexError: tuple index out of range
431 *** format_exception:
432 ['Traceback (most recent call last):\n',
R. David Murraye02a3012009-04-27 18:38:19 +0000433 ' File "<doctest...>", line 10, in <module>\n lumberjack()\n',
434 ' File "<doctest...>", line 4, in lumberjack\n bright_side_of_death()\n',
435 ' File "<doctest...>", line 7, in bright_side_of_death\n return tuple()[0]\n',
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000436 'IndexError: tuple index out of range\n']
437 *** extract_tb:
Zachary Warec90fccd2016-08-10 00:35:27 -0500438 [<FrameSummary file <doctest...>, line 10 in <module>>,
439 <FrameSummary file <doctest...>, line 4 in lumberjack>,
440 <FrameSummary file <doctest...>, line 7 in bright_side_of_death>]
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000441 *** format_tb:
R. David Murraye02a3012009-04-27 18:38:19 +0000442 [' File "<doctest...>", line 10, in <module>\n lumberjack()\n',
443 ' File "<doctest...>", line 4, in lumberjack\n bright_side_of_death()\n',
444 ' File "<doctest...>", line 7, in bright_side_of_death\n return tuple()[0]\n']
445 *** tb_lineno: 10
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000446
447
448The following example shows the different ways to print and format the stack::
449
450 >>> import traceback
451 >>> def another_function():
452 ... lumberstack()
Georg Brandl48310cd2009-01-03 21:18:54 +0000453 ...
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000454 >>> def lumberstack():
455 ... traceback.print_stack()
Georg Brandlf6945182008-02-01 11:56:49 +0000456 ... print(repr(traceback.extract_stack()))
457 ... print(repr(traceback.format_stack()))
Georg Brandl48310cd2009-01-03 21:18:54 +0000458 ...
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000459 >>> another_function()
460 File "<doctest>", line 10, in <module>
461 another_function()
462 File "<doctest>", line 3, in another_function
463 lumberstack()
464 File "<doctest>", line 6, in lumberstack
465 traceback.print_stack()
466 [('<doctest>', 10, '<module>', 'another_function()'),
467 ('<doctest>', 3, 'another_function', 'lumberstack()'),
Georg Brandlf6945182008-02-01 11:56:49 +0000468 ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')]
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000469 [' File "<doctest>", line 10, in <module>\n another_function()\n',
470 ' File "<doctest>", line 3, in another_function\n lumberstack()\n',
Georg Brandlf6945182008-02-01 11:56:49 +0000471 ' File "<doctest>", line 8, in lumberstack\n print(repr(traceback.format_stack()))\n']
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000472
473
R. David Murraye02a3012009-04-27 18:38:19 +0000474This last example demonstrates the final few formatting functions:
475
476.. doctest::
477 :options: +NORMALIZE_WHITESPACE
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000478
479 >>> import traceback
Georg Brandl0142d4a2009-04-27 16:22:44 +0000480 >>> traceback.format_list([('spam.py', 3, '<module>', 'spam.eggs()'),
481 ... ('eggs.py', 42, 'eggs', 'return "bacon"')])
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000482 [' File "spam.py", line 3, in <module>\n spam.eggs()\n',
483 ' File "eggs.py", line 42, in eggs\n return "bacon"\n']
Georg Brandl0142d4a2009-04-27 16:22:44 +0000484 >>> an_error = IndexError('tuple index out of range')
485 >>> traceback.format_exception_only(type(an_error), an_error)
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000486 ['IndexError: tuple index out of range\n']