blob: c233f18d30a29f2c3fa71d135eae8162687c73d3 [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
Zackery Spytz91e93792020-11-05 15:18:44 -070039.. function:: print_exception(exc, /[, value, tb], limit=None, \
40 file=None, chain=True)
Georg Brandl116aa622007-08-15 14:28:22 +000041
Senthil Kumarana82908f2016-01-15 21:45:17 -080042 Print exception information and stack trace entries from traceback object
43 *tb* to *file*. This differs from :func:`print_tb` in the following
Georg Brandl1aea30a2008-07-19 15:51:07 +000044 ways:
45
Senthil Kumarana82908f2016-01-15 21:45:17 -080046 * if *tb* is not ``None``, it prints a header ``Traceback (most recent
Georg Brandl1aea30a2008-07-19 15:51:07 +000047 call last):``
Serhiy Storchakaddb961d2018-10-26 09:00:49 +030048
Zackery Spytz91e93792020-11-05 15:18:44 -070049 * it prints the exception type and *value* after the stack trace
Serhiy Storchakaddb961d2018-10-26 09:00:49 +030050
Serhiy Storchaka913876d2018-10-28 13:41:26 +020051 .. index:: single: ^ (caret); marker
Serhiy Storchakaddb961d2018-10-26 09:00:49 +030052
Matthias Bussonniercdb89cd2017-06-01 14:54:01 -070053 * if *type(value)* is :exc:`SyntaxError` and *value* has the appropriate
54 format, it prints the line where the syntax error occurred with a caret
55 indicating the approximate position of the error.
Georg Brandl1aea30a2008-07-19 15:51:07 +000056
Zackery Spytz91e93792020-11-05 15:18:44 -070057 Since Python 3.10, instead of passing *value* and *tb*, an exception object
58 can be passed as the first argument. If *value* and *tb* are provided, the
59 first argument is ignored in order to provide backwards compatibility.
60
Serhiy Storchaka24559e42015-05-03 13:19:46 +030061 The optional *limit* argument has the same meaning as for :func:`print_tb`.
Georg Brandl1aea30a2008-07-19 15:51:07 +000062 If *chain* is true (the default), then chained exceptions (the
63 :attr:`__cause__` or :attr:`__context__` attributes of the exception) will be
64 printed as well, like the interpreter itself does when printing an unhandled
65 exception.
Georg Brandl116aa622007-08-15 14:28:22 +000066
Matthias Bussonniercdb89cd2017-06-01 14:54:01 -070067 .. versionchanged:: 3.5
68 The *etype* argument is ignored and inferred from the type of *value*.
69
Zackery Spytz91e93792020-11-05 15:18:44 -070070 .. versionchanged:: 3.10
71 The *etype* parameter has been renamed to *exc* and is now
72 positional-only.
73
Georg Brandl116aa622007-08-15 14:28:22 +000074
Georg Brandl7f01a132009-09-16 15:58:14 +000075.. function:: print_exc(limit=None, file=None, chain=True)
Georg Brandl116aa622007-08-15 14:28:22 +000076
Serhiy Storchaka24559e42015-05-03 13:19:46 +030077 This is a shorthand for ``print_exception(*sys.exc_info(), limit, file,
78 chain)``.
Georg Brandl116aa622007-08-15 14:28:22 +000079
80
Georg Brandl7f01a132009-09-16 15:58:14 +000081.. function:: print_last(limit=None, file=None, chain=True)
Georg Brandl116aa622007-08-15 14:28:22 +000082
83 This is a shorthand for ``print_exception(sys.last_type, sys.last_value,
Serhiy Storchaka24559e42015-05-03 13:19:46 +030084 sys.last_traceback, limit, file, chain)``. In general it will work only
85 after an exception has reached an interactive prompt (see
86 :data:`sys.last_type`).
Georg Brandl116aa622007-08-15 14:28:22 +000087
88
Georg Brandl7f01a132009-09-16 15:58:14 +000089.. function:: print_stack(f=None, limit=None, file=None)
Georg Brandl116aa622007-08-15 14:28:22 +000090
Serhiy Storchaka24559e42015-05-03 13:19:46 +030091 Print up to *limit* stack trace entries (starting from the invocation
92 point) if *limit* is positive. Otherwise, print the last ``abs(limit)``
93 entries. If *limit* is omitted or ``None``, all entries are printed.
94 The optional *f* argument can be used to specify an alternate stack frame
95 to start. The optional *file* argument has the same meaning as for
96 :func:`print_tb`.
97
98 .. versionchanged:: 3.5
99 Added negative *limit* support.
Georg Brandl116aa622007-08-15 14:28:22 +0000100
101
Senthil Kumarana82908f2016-01-15 21:45:17 -0800102.. function:: extract_tb(tb, limit=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000103
torsavaf394ee52018-08-02 17:08:59 +0100104 Return a :class:`StackSummary` object representing a list of "pre-processed"
105 stack trace entries extracted from the traceback object *tb*. It is useful
106 for alternate formatting of stack traces. The optional *limit* argument has
107 the same meaning as for :func:`print_tb`. A "pre-processed" stack trace
108 entry is a :class:`FrameSummary` object containing attributes
109 :attr:`~FrameSummary.filename`, :attr:`~FrameSummary.lineno`,
110 :attr:`~FrameSummary.name`, and :attr:`~FrameSummary.line` representing the
111 information that is usually printed for a stack trace. The
112 :attr:`~FrameSummary.line` is a string with leading and trailing
113 whitespace stripped; if the source is not available it is ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000114
115
Georg Brandl7f01a132009-09-16 15:58:14 +0000116.. function:: extract_stack(f=None, limit=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000117
118 Extract the raw traceback from the current stack frame. The return value has
119 the same format as for :func:`extract_tb`. The optional *f* and *limit*
120 arguments have the same meaning as for :func:`print_stack`.
121
122
Senthil Kumarana82908f2016-01-15 21:45:17 -0800123.. function:: format_list(extracted_list)
Georg Brandl116aa622007-08-15 14:28:22 +0000124
torsavaf394ee52018-08-02 17:08:59 +0100125 Given a list of tuples or :class:`FrameSummary` objects as returned by
126 :func:`extract_tb` or :func:`extract_stack`, return a list of strings ready
127 for printing. Each string in the resulting list corresponds to the item with
128 the same index in the argument list. Each string ends in a newline; the
129 strings may contain internal newlines as well, for those items whose source
130 text line is not ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000131
132
Zackery Spytz91e93792020-11-05 15:18:44 -0700133.. function:: format_exception_only(exc, /[, value])
Georg Brandl116aa622007-08-15 14:28:22 +0000134
Zackery Spytz91e93792020-11-05 15:18:44 -0700135 Format the exception part of a traceback using an exception value such as
136 given by ``sys.last_value``. The return value is a list of strings, each
137 ending in a newline. Normally, the list contains a single string; however,
138 for :exc:`SyntaxError` exceptions, it contains several lines that (when
139 printed) display detailed information about where the syntax error occurred.
140 The message indicating which exception occurred is the always last string in
141 the list.
142
143 Since Python 3.10, instead of passing *value*, an exception object
144 can be passed as the first argument. If *value* is provided, the first
145 argument is ignored in order to provide backwards compatibility.
146
147 .. versionchanged:: 3.10
148 The *etype* parameter has been renamed to *exc* and is now
149 positional-only.
Georg Brandl116aa622007-08-15 14:28:22 +0000150
151
Zackery Spytz91e93792020-11-05 15:18:44 -0700152.. function:: format_exception(exc, /[, value, tb], limit=None, chain=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000153
154 Format a stack trace and the exception information. The arguments have the
155 same meaning as the corresponding arguments to :func:`print_exception`. The
Senthil Kumarana82908f2016-01-15 21:45:17 -0800156 return value is a list of strings, each ending in a newline and some
157 containing internal newlines. When these lines are concatenated and printed,
158 exactly the same text is printed as does :func:`print_exception`.
Georg Brandl116aa622007-08-15 14:28:22 +0000159
Matthias Bussonniercdb89cd2017-06-01 14:54:01 -0700160 .. versionchanged:: 3.5
161 The *etype* argument is ignored and inferred from the type of *value*.
162
Zackery Spytz91e93792020-11-05 15:18:44 -0700163 .. versionchanged:: 3.10
164 This function's behavior and signature were modified to match
165 :func:`print_exception`.
166
Georg Brandl116aa622007-08-15 14:28:22 +0000167
Georg Brandl7f01a132009-09-16 15:58:14 +0000168.. function:: format_exc(limit=None, chain=True)
Georg Brandl1aea30a2008-07-19 15:51:07 +0000169
Senthil Kumarana82908f2016-01-15 21:45:17 -0800170 This is like ``print_exc(limit)`` but returns a string instead of printing to
171 a file.
Georg Brandl1aea30a2008-07-19 15:51:07 +0000172
173
Georg Brandl7f01a132009-09-16 15:58:14 +0000174.. function:: format_tb(tb, limit=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000175
176 A shorthand for ``format_list(extract_tb(tb, limit))``.
177
178
Georg Brandl7f01a132009-09-16 15:58:14 +0000179.. function:: format_stack(f=None, limit=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000180
181 A shorthand for ``format_list(extract_stack(f, limit))``.
182
Andrew Kuchling173a1572013-09-15 18:15:56 -0400183.. function:: clear_frames(tb)
184
185 Clears the local variables of all the stack frames in a traceback *tb*
186 by calling the :meth:`clear` method of each frame object.
187
188 .. versionadded:: 3.4
189
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300190.. function:: walk_stack(f)
191
Berker Peksag49f373b2015-03-06 12:18:06 +0200192 Walk a stack following ``f.f_back`` from the given frame, yielding the frame
193 and line number for each frame. If *f* is ``None``, the current stack is
194 used. This helper is used with :meth:`StackSummary.extract`.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300195
196 .. versionadded:: 3.5
197
198.. function:: walk_tb(tb)
199
Berker Peksag49f373b2015-03-06 12:18:06 +0200200 Walk a traceback following ``tb_next`` yielding the frame and line number
201 for each frame. This helper is used with :meth:`StackSummary.extract`.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300202
203 .. versionadded:: 3.5
204
205The module also defines the following classes:
206
207:class:`TracebackException` Objects
208-----------------------------------
209
Berker Peksag49f373b2015-03-06 12:18:06 +0200210.. versionadded:: 3.5
211
212:class:`TracebackException` objects are created from actual exceptions to
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300213capture data for later printing in a lightweight fashion.
214
Robert Collinsd7c7e0e2015-03-05 20:28:52 +1300215.. class:: TracebackException(exc_type, exc_value, exc_traceback, *, limit=None, lookup_lines=True, capture_locals=False)
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300216
Berker Peksag49f373b2015-03-06 12:18:06 +0200217 Capture an exception for later rendering. *limit*, *lookup_lines* and
218 *capture_locals* are as for the :class:`StackSummary` class.
Robert Collinsd7c7e0e2015-03-05 20:28:52 +1300219
220 Note that when locals are captured, they are also shown in the traceback.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300221
Berker Peksag49f373b2015-03-06 12:18:06 +0200222 .. attribute:: __cause__
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300223
Berker Peksag49f373b2015-03-06 12:18:06 +0200224 A :class:`TracebackException` of the original ``__cause__``.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300225
Berker Peksag49f373b2015-03-06 12:18:06 +0200226 .. attribute:: __context__
Robert Collinsd7c7e0e2015-03-05 20:28:52 +1300227
Berker Peksag49f373b2015-03-06 12:18:06 +0200228 A :class:`TracebackException` of the original ``__context__``.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300229
Berker Peksag49f373b2015-03-06 12:18:06 +0200230 .. attribute:: __suppress_context__
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300231
Berker Peksag49f373b2015-03-06 12:18:06 +0200232 The ``__suppress_context__`` value from the original exception.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300233
Berker Peksag49f373b2015-03-06 12:18:06 +0200234 .. attribute:: stack
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300235
Berker Peksag49f373b2015-03-06 12:18:06 +0200236 A :class:`StackSummary` representing the traceback.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300237
Berker Peksag49f373b2015-03-06 12:18:06 +0200238 .. attribute:: exc_type
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300239
Berker Peksag49f373b2015-03-06 12:18:06 +0200240 The class of the original traceback.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300241
Berker Peksag49f373b2015-03-06 12:18:06 +0200242 .. attribute:: filename
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300243
Berker Peksag49f373b2015-03-06 12:18:06 +0200244 For syntax errors - the file name where the error occurred.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300245
Berker Peksag49f373b2015-03-06 12:18:06 +0200246 .. attribute:: lineno
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300247
Berker Peksag49f373b2015-03-06 12:18:06 +0200248 For syntax errors - the line number where the error occurred.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300249
Berker Peksag49f373b2015-03-06 12:18:06 +0200250 .. attribute:: text
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300251
Berker Peksag49f373b2015-03-06 12:18:06 +0200252 For syntax errors - the text where the error occurred.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300253
Berker Peksag49f373b2015-03-06 12:18:06 +0200254 .. attribute:: offset
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300255
Berker Peksag49f373b2015-03-06 12:18:06 +0200256 For syntax errors - the offset into the text where the error occurred.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300257
Berker Peksag49f373b2015-03-06 12:18:06 +0200258 .. attribute:: msg
259
260 For syntax errors - the compiler error message.
261
262 .. classmethod:: from_exception(exc, *, limit=None, lookup_lines=True, capture_locals=False)
263
264 Capture an exception for later rendering. *limit*, *lookup_lines* and
265 *capture_locals* are as for the :class:`StackSummary` class.
266
267 Note that when locals are captured, they are also shown in the traceback.
268
269 .. method:: format(*, chain=True)
270
271 Format the exception.
272
273 If *chain* is not ``True``, ``__cause__`` and ``__context__`` will not
274 be formatted.
275
276 The return value is a generator of strings, each ending in a newline and
277 some containing internal newlines. :func:`~traceback.print_exception`
278 is a wrapper around this method which just prints the lines to a file.
279
280 The message indicating which exception occurred is always the last
281 string in the output.
282
283 .. method:: format_exception_only()
284
285 Format the exception part of the traceback.
286
287 The return value is a generator of strings, each ending in a newline.
288
289 Normally, the generator emits a single string; however, for
290 :exc:`SyntaxError` exceptions, it emits several lines that (when
291 printed) display detailed information about where the syntax
292 error occurred.
293
294 The message indicating which exception occurred is always the last
295 string in the output.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300296
297
298:class:`StackSummary` Objects
299-----------------------------
300
Berker Peksag49f373b2015-03-06 12:18:06 +0200301.. versionadded:: 3.5
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300302
Berker Peksag49f373b2015-03-06 12:18:06 +0200303:class:`StackSummary` objects represent a call stack ready for formatting.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300304
Berker Peksag49f373b2015-03-06 12:18:06 +0200305.. class:: StackSummary
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300306
Berker Peksag49f373b2015-03-06 12:18:06 +0200307 .. classmethod:: extract(frame_gen, *, limit=None, lookup_lines=True, capture_locals=False)
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300308
Berker Peksag49f373b2015-03-06 12:18:06 +0200309 Construct a :class:`StackSummary` object from a frame generator (such as
310 is returned by :func:`~traceback.walk_stack` or
311 :func:`~traceback.walk_tb`).
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300312
Berker Peksag49f373b2015-03-06 12:18:06 +0200313 If *limit* is supplied, only this many frames are taken from *frame_gen*.
314 If *lookup_lines* is ``False``, the returned :class:`FrameSummary`
315 objects will not have read their lines in yet, making the cost of
316 creating the :class:`StackSummary` cheaper (which may be valuable if it
317 may not actually get formatted). If *capture_locals* is ``True`` the
318 local variables in each :class:`FrameSummary` are captured as object
319 representations.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300320
Berker Peksag49f373b2015-03-06 12:18:06 +0200321 .. classmethod:: from_list(a_list)
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300322
torsavaf394ee52018-08-02 17:08:59 +0100323 Construct a :class:`StackSummary` object from a supplied list of
324 :class:`FrameSummary` objects or old-style list of tuples. Each tuple
325 should be a 4-tuple with filename, lineno, name, line as the elements.
Berker Peksag49f373b2015-03-06 12:18:06 +0200326
Nick Coghland0034232016-08-15 13:11:34 +1000327 .. method:: format()
328
329 Returns a list of strings ready for printing. Each string in the
330 resulting list corresponds to a single frame from the stack.
331 Each string ends in a newline; the strings may contain internal
332 newlines as well, for those items with source text lines.
333
334 For long sequences of the same frame and line, the first few
335 repetitions are shown, followed by a summary line stating the exact
336 number of further repetitions.
337
Nick Coghlan02d03df2016-08-16 10:58:14 +1000338 .. versionchanged:: 3.6
339 Long sequences of repeated frames are now abbreviated.
Nick Coghland0034232016-08-15 13:11:34 +1000340
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300341
342:class:`FrameSummary` Objects
343-----------------------------
344
Berker Peksag49f373b2015-03-06 12:18:06 +0200345.. versionadded:: 3.5
346
347:class:`FrameSummary` objects represent a single frame in a traceback.
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300348
349.. class:: FrameSummary(filename, lineno, name, lookup_line=True, locals=None, line=None)
Robert Collins6bc2c1e2015-03-05 12:07:57 +1300350
351 Represent a single frame in the traceback or stack that is being formatted
352 or printed. It may optionally have a stringified version of the frames
Berker Peksag49f373b2015-03-06 12:18:06 +0200353 locals included in it. If *lookup_line* is ``False``, the source code is not
354 looked up until the :class:`FrameSummary` has the :attr:`~FrameSummary.line`
355 attribute accessed (which also happens when casting it to a tuple).
356 :attr:`~FrameSummary.line` may be directly provided, and will prevent line
357 lookups happening at all. *locals* is an optional local variable
358 dictionary, and if supplied the variable representations are stored in the
359 summary for later display.
Georg Brandl116aa622007-08-15 14:28:22 +0000360
Georg Brandl116aa622007-08-15 14:28:22 +0000361.. _traceback-example:
362
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000363Traceback Examples
364------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000365
366This simple example implements a basic read-eval-print loop, similar to (but
367less useful than) the standard Python interactive interpreter loop. For a more
368complete implementation of the interpreter loop, refer to the :mod:`code`
369module. ::
370
371 import sys, traceback
372
373 def run_user_code(envdir):
Georg Brandl8d5c3922007-12-02 22:48:17 +0000374 source = input(">>> ")
Georg Brandl116aa622007-08-15 14:28:22 +0000375 try:
376 exec(source, envdir)
Andrew Svetlov47395612012-11-02 22:07:26 +0200377 except Exception:
Collin Winterc79461b2007-09-01 23:34:30 +0000378 print("Exception in user code:")
379 print("-"*60)
Georg Brandl116aa622007-08-15 14:28:22 +0000380 traceback.print_exc(file=sys.stdout)
Collin Winterc79461b2007-09-01 23:34:30 +0000381 print("-"*60)
Georg Brandl116aa622007-08-15 14:28:22 +0000382
383 envdir = {}
Collin Winterc79461b2007-09-01 23:34:30 +0000384 while True:
Georg Brandl116aa622007-08-15 14:28:22 +0000385 run_user_code(envdir)
386
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000387
388The following example demonstrates the different ways to print and format the
R. David Murraye02a3012009-04-27 18:38:19 +0000389exception and traceback:
390
391.. testcode::
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000392
393 import sys, traceback
394
395 def lumberjack():
396 bright_side_of_death()
Georg Brandl48310cd2009-01-03 21:18:54 +0000397
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000398 def bright_side_of_death():
399 return tuple()[0]
Georg Brandl48310cd2009-01-03 21:18:54 +0000400
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000401 try:
402 lumberjack()
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000403 except IndexError:
404 exc_type, exc_value, exc_traceback = sys.exc_info()
Georg Brandlf6945182008-02-01 11:56:49 +0000405 print("*** print_tb:")
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000406 traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
Georg Brandlf6945182008-02-01 11:56:49 +0000407 print("*** print_exception:")
Matthias Bussonniercdb89cd2017-06-01 14:54:01 -0700408 # exc_type below is ignored on 3.5 and later
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000409 traceback.print_exception(exc_type, exc_value, exc_traceback,
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000410 limit=2, file=sys.stdout)
Georg Brandlf6945182008-02-01 11:56:49 +0000411 print("*** print_exc:")
Zachary Warec90fccd2016-08-10 00:35:27 -0500412 traceback.print_exc(limit=2, file=sys.stdout)
Georg Brandlf6945182008-02-01 11:56:49 +0000413 print("*** format_exc, first and last line:")
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000414 formatted_lines = traceback.format_exc().splitlines()
Georg Brandlf6945182008-02-01 11:56:49 +0000415 print(formatted_lines[0])
416 print(formatted_lines[-1])
417 print("*** format_exception:")
Matthias Bussonniercdb89cd2017-06-01 14:54:01 -0700418 # exc_type below is ignored on 3.5 and later
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000419 print(repr(traceback.format_exception(exc_type, exc_value,
420 exc_traceback)))
Georg Brandlf6945182008-02-01 11:56:49 +0000421 print("*** extract_tb:")
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000422 print(repr(traceback.extract_tb(exc_traceback)))
Georg Brandlf6945182008-02-01 11:56:49 +0000423 print("*** format_tb:")
Ezio Melotti5e0110e2010-03-13 01:28:34 +0000424 print(repr(traceback.format_tb(exc_traceback)))
425 print("*** tb_lineno:", exc_traceback.tb_lineno)
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000426
R. David Murraye02a3012009-04-27 18:38:19 +0000427The output for the example would look similar to this:
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000428
R. David Murraye02a3012009-04-27 18:38:19 +0000429.. testoutput::
430 :options: +NORMALIZE_WHITESPACE
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000431
432 *** print_tb:
R. David Murraye02a3012009-04-27 18:38:19 +0000433 File "<doctest...>", line 10, in <module>
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000434 lumberjack()
435 *** print_exception:
436 Traceback (most recent call last):
R. David Murraye02a3012009-04-27 18:38:19 +0000437 File "<doctest...>", line 10, in <module>
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000438 lumberjack()
R. David Murraye02a3012009-04-27 18:38:19 +0000439 File "<doctest...>", line 4, in lumberjack
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000440 bright_side_of_death()
441 IndexError: tuple index out of range
442 *** print_exc:
443 Traceback (most recent call last):
R. David Murraye02a3012009-04-27 18:38:19 +0000444 File "<doctest...>", line 10, in <module>
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000445 lumberjack()
R. David Murraye02a3012009-04-27 18:38:19 +0000446 File "<doctest...>", line 4, in lumberjack
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000447 bright_side_of_death()
448 IndexError: tuple index out of range
449 *** format_exc, first and last line:
450 Traceback (most recent call last):
451 IndexError: tuple index out of range
452 *** format_exception:
453 ['Traceback (most recent call last):\n',
R. David Murraye02a3012009-04-27 18:38:19 +0000454 ' File "<doctest...>", line 10, in <module>\n lumberjack()\n',
455 ' File "<doctest...>", line 4, in lumberjack\n bright_side_of_death()\n',
456 ' File "<doctest...>", line 7, in bright_side_of_death\n return tuple()[0]\n',
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000457 'IndexError: tuple index out of range\n']
458 *** extract_tb:
Zachary Warec90fccd2016-08-10 00:35:27 -0500459 [<FrameSummary file <doctest...>, line 10 in <module>>,
460 <FrameSummary file <doctest...>, line 4 in lumberjack>,
461 <FrameSummary file <doctest...>, line 7 in bright_side_of_death>]
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000462 *** format_tb:
R. David Murraye02a3012009-04-27 18:38:19 +0000463 [' File "<doctest...>", line 10, in <module>\n lumberjack()\n',
464 ' File "<doctest...>", line 4, in lumberjack\n bright_side_of_death()\n',
465 ' File "<doctest...>", line 7, in bright_side_of_death\n return tuple()[0]\n']
466 *** tb_lineno: 10
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000467
468
469The following example shows the different ways to print and format the stack::
470
471 >>> import traceback
472 >>> def another_function():
473 ... lumberstack()
Georg Brandl48310cd2009-01-03 21:18:54 +0000474 ...
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000475 >>> def lumberstack():
476 ... traceback.print_stack()
Georg Brandlf6945182008-02-01 11:56:49 +0000477 ... print(repr(traceback.extract_stack()))
478 ... print(repr(traceback.format_stack()))
Georg Brandl48310cd2009-01-03 21:18:54 +0000479 ...
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000480 >>> another_function()
481 File "<doctest>", line 10, in <module>
482 another_function()
483 File "<doctest>", line 3, in another_function
484 lumberstack()
485 File "<doctest>", line 6, in lumberstack
486 traceback.print_stack()
487 [('<doctest>', 10, '<module>', 'another_function()'),
488 ('<doctest>', 3, 'another_function', 'lumberstack()'),
Georg Brandlf6945182008-02-01 11:56:49 +0000489 ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')]
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000490 [' File "<doctest>", line 10, in <module>\n another_function()\n',
491 ' File "<doctest>", line 3, in another_function\n lumberstack()\n',
Georg Brandlf6945182008-02-01 11:56:49 +0000492 ' File "<doctest>", line 8, in lumberstack\n print(repr(traceback.format_stack()))\n']
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000493
494
R. David Murraye02a3012009-04-27 18:38:19 +0000495This last example demonstrates the final few formatting functions:
496
497.. doctest::
498 :options: +NORMALIZE_WHITESPACE
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000499
500 >>> import traceback
Georg Brandl0142d4a2009-04-27 16:22:44 +0000501 >>> traceback.format_list([('spam.py', 3, '<module>', 'spam.eggs()'),
502 ... ('eggs.py', 42, 'eggs', 'return "bacon"')])
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000503 [' File "spam.py", line 3, in <module>\n spam.eggs()\n',
504 ' File "eggs.py", line 42, in eggs\n return "bacon"\n']
Georg Brandl0142d4a2009-04-27 16:22:44 +0000505 >>> an_error = IndexError('tuple index out of range')
506 >>> traceback.format_exception_only(type(an_error), an_error)
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000507 ['IndexError: tuple index out of range\n']