1 :mod:`traceback` --- Print or retrieve a stack traceback 2 ======================================================== 3 4 .. module:: traceback 5 :synopsis: Print or retrieve a stack traceback. 6 7 **Source code:** :source:`Lib/traceback.py` 8 9 -------------- 10 11 This module provides a standard interface to extract, format and print stack 12 traces of Python programs. It exactly mimics the behavior of the Python 13 interpreter when it prints a stack trace. This is useful when you want to print 14 stack traces under program control, such as in a "wrapper" around the 15 interpreter. 16 17 .. index:: object: traceback 18 19 The module uses traceback objects --- this is the object type that is stored in 20 the :data:`sys.last_traceback` variable and returned as the third item from 21 :func:`sys.exc_info`. 22 23 The module defines the following functions: 24 25 26 .. function:: print_tb(tb, limit=None, file=None) 27 28 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. 34 35 .. versionchanged:: 3.5 36 Added negative *limit* support. 37 38 39 .. function:: print_exception(etype, value, tb, limit=None, file=None, chain=True) 40 41 Print exception information and stack trace entries from traceback object 42 *tb* to *file*. This differs from :func:`print_tb` in the following 43 ways: 44 45 * if *tb* is not ``None``, it prints a header ``Traceback (most recent 46 call last):`` 47 * it prints the exception *etype* and *value* after the stack trace 48 * if *etype* is :exc:`SyntaxError` and *value* has the appropriate format, it 49 prints the line where the syntax error occurred with a caret indicating the 50 approximate position of the error. 51 52 The optional *limit* argument has the same meaning as for :func:`print_tb`. 53 If *chain* is true (the default), then chained exceptions (the 54 :attr:`__cause__` or :attr:`__context__` attributes of the exception) will be 55 printed as well, like the interpreter itself does when printing an unhandled 56 exception. 57 58 59 .. function:: print_exc(limit=None, file=None, chain=True) 60 61 This is a shorthand for ``print_exception(*sys.exc_info(), limit, file, 62 chain)``. 63 64 65 .. function:: print_last(limit=None, file=None, chain=True) 66 67 This is a shorthand for ``print_exception(sys.last_type, sys.last_value, 68 sys.last_traceback, limit, file, chain)``. In general it will work only 69 after an exception has reached an interactive prompt (see 70 :data:`sys.last_type`). 71 72 73 .. function:: print_stack(f=None, limit=None, file=None) 74 75 Print up to *limit* stack trace entries (starting from the invocation 76 point) if *limit* is positive. Otherwise, print the last ``abs(limit)`` 77 entries. If *limit* is omitted or ``None``, all entries are printed. 78 The optional *f* argument can be used to specify an alternate stack frame 79 to start. The optional *file* argument has the same meaning as for 80 :func:`print_tb`. 81 82 .. versionchanged:: 3.5 83 Added negative *limit* support. 84 85 86 .. function:: extract_tb(tb, limit=None) 87 88 Return a list of "pre-processed" stack trace entries extracted from the 89 traceback object *tb*. It is useful for alternate formatting of 90 stack traces. The optional *limit* argument has the same meaning as for 91 :func:`print_tb`. A "pre-processed" stack trace entry is a 4-tuple 92 (*filename*, *line number*, *function name*, *text*) representing the 93 information that is usually printed for a stack trace. The *text* is a 94 string with leading and trailing whitespace stripped; if the source is 95 not available it is ``None``. 96 97 98 .. function:: extract_stack(f=None, limit=None) 99 100 Extract the raw traceback from the current stack frame. The return value has 101 the same format as for :func:`extract_tb`. The optional *f* and *limit* 102 arguments have the same meaning as for :func:`print_stack`. 103 104 105 .. function:: format_list(extracted_list) 106 107 Given a list of tuples as returned by :func:`extract_tb` or 108 :func:`extract_stack`, return a list of strings ready for printing. Each 109 string in the resulting list corresponds to the item with the same index in 110 the argument list. Each string ends in a newline; the strings may contain 111 internal newlines as well, for those items whose source text line is not 112 ``None``. 113 114 115 .. function:: format_exception_only(etype, value) 116 117 Format the exception part of a traceback. The arguments are the exception 118 type and value such as given by ``sys.last_type`` and ``sys.last_value``. 119 The return value is a list of strings, each ending in a newline. Normally, 120 the list contains a single string; however, for :exc:`SyntaxError` 121 exceptions, it contains several lines that (when printed) display detailed 122 information about where the syntax error occurred. The message indicating 123 which exception occurred is the always last string in the list. 124 125 126 .. function:: format_exception(etype, value, tb, limit=None, chain=True) 127 128 Format a stack trace and the exception information. The arguments have the 129 same meaning as the corresponding arguments to :func:`print_exception`. The 130 return value is a list of strings, each ending in a newline and some 131 containing internal newlines. When these lines are concatenated and printed, 132 exactly the same text is printed as does :func:`print_exception`. 133 134 135 .. function:: format_exc(limit=None, chain=True) 136 137 This is like ``print_exc(limit)`` but returns a string instead of printing to 138 a file. 139 140 141 .. function:: format_tb(tb, limit=None) 142 143 A shorthand for ``format_list(extract_tb(tb, limit))``. 144 145 146 .. function:: format_stack(f=None, limit=None) 147 148 A shorthand for ``format_list(extract_stack(f, limit))``. 149 150 .. function:: clear_frames(tb) 151 152 Clears the local variables of all the stack frames in a traceback *tb* 153 by calling the :meth:`clear` method of each frame object. 154 155 .. versionadded:: 3.4 156 157 .. function:: walk_stack(f) 158 159 Walk a stack following ``f.f_back`` from the given frame, yielding the frame 160 and line number for each frame. If *f* is ``None``, the current stack is 161 used. This helper is used with :meth:`StackSummary.extract`. 162 163 .. versionadded:: 3.5 164 165 .. function:: walk_tb(tb) 166 167 Walk a traceback following ``tb_next`` yielding the frame and line number 168 for each frame. This helper is used with :meth:`StackSummary.extract`. 169 170 .. versionadded:: 3.5 171 172 The module also defines the following classes: 173 174 :class:`TracebackException` Objects 175 ----------------------------------- 176 177 .. versionadded:: 3.5 178 179 :class:`TracebackException` objects are created from actual exceptions to 180 capture data for later printing in a lightweight fashion. 181 182 .. class:: TracebackException(exc_type, exc_value, exc_traceback, *, limit=None, lookup_lines=True, capture_locals=False) 183 184 Capture an exception for later rendering. *limit*, *lookup_lines* and 185 *capture_locals* are as for the :class:`StackSummary` class. 186 187 Note that when locals are captured, they are also shown in the traceback. 188 189 .. attribute:: __cause__ 190 191 A :class:`TracebackException` of the original ``__cause__``. 192 193 .. attribute:: __context__ 194 195 A :class:`TracebackException` of the original ``__context__``. 196 197 .. attribute:: __suppress_context__ 198 199 The ``__suppress_context__`` value from the original exception. 200 201 .. attribute:: stack 202 203 A :class:`StackSummary` representing the traceback. 204 205 .. attribute:: exc_type 206 207 The class of the original traceback. 208 209 .. attribute:: filename 210 211 For syntax errors - the file name where the error occurred. 212 213 .. attribute:: lineno 214 215 For syntax errors - the line number where the error occurred. 216 217 .. attribute:: text 218 219 For syntax errors - the text where the error occurred. 220 221 .. attribute:: offset 222 223 For syntax errors - the offset into the text where the error occurred. 224 225 .. attribute:: msg 226 227 For syntax errors - the compiler error message. 228 229 .. classmethod:: from_exception(exc, *, limit=None, lookup_lines=True, capture_locals=False) 230 231 Capture an exception for later rendering. *limit*, *lookup_lines* and 232 *capture_locals* are as for the :class:`StackSummary` class. 233 234 Note that when locals are captured, they are also shown in the traceback. 235 236 .. method:: format(*, chain=True) 237 238 Format the exception. 239 240 If *chain* is not ``True``, ``__cause__`` and ``__context__`` will not 241 be formatted. 242 243 The return value is a generator of strings, each ending in a newline and 244 some containing internal newlines. :func:`~traceback.print_exception` 245 is a wrapper around this method which just prints the lines to a file. 246 247 The message indicating which exception occurred is always the last 248 string in the output. 249 250 .. method:: format_exception_only() 251 252 Format the exception part of the traceback. 253 254 The return value is a generator of strings, each ending in a newline. 255 256 Normally, the generator emits a single string; however, for 257 :exc:`SyntaxError` exceptions, it emits several lines that (when 258 printed) display detailed information about where the syntax 259 error occurred. 260 261 The message indicating which exception occurred is always the last 262 string in the output. 263 264 265 :class:`StackSummary` Objects 266 ----------------------------- 267 268 .. versionadded:: 3.5 269 270 :class:`StackSummary` objects represent a call stack ready for formatting. 271 272 .. class:: StackSummary 273 274 .. classmethod:: extract(frame_gen, *, limit=None, lookup_lines=True, capture_locals=False) 275 276 Construct a :class:`StackSummary` object from a frame generator (such as 277 is returned by :func:`~traceback.walk_stack` or 278 :func:`~traceback.walk_tb`). 279 280 If *limit* is supplied, only this many frames are taken from *frame_gen*. 281 If *lookup_lines* is ``False``, the returned :class:`FrameSummary` 282 objects will not have read their lines in yet, making the cost of 283 creating the :class:`StackSummary` cheaper (which may be valuable if it 284 may not actually get formatted). If *capture_locals* is ``True`` the 285 local variables in each :class:`FrameSummary` are captured as object 286 representations. 287 288 .. classmethod:: from_list(a_list) 289 290 Construct a :class:`StackSummary` object from a supplied old-style list 291 of tuples. Each tuple should be a 4-tuple with filename, lineno, name, 292 line as the elements. 293 294 .. method:: format() 295 296 Returns a list of strings ready for printing. Each string in the 297 resulting list corresponds to a single frame from the stack. 298 Each string ends in a newline; the strings may contain internal 299 newlines as well, for those items with source text lines. 300 301 For long sequences of the same frame and line, the first few 302 repetitions are shown, followed by a summary line stating the exact 303 number of further repetitions. 304 305 .. versionchanged:: 3.6 306 Long sequences of repeated frames are now abbreviated. 307 308 309 :class:`FrameSummary` Objects 310 ----------------------------- 311 312 .. versionadded:: 3.5 313 314 :class:`FrameSummary` objects represent a single frame in a traceback. 315 316 .. class:: FrameSummary(filename, lineno, name, lookup_line=True, locals=None, line=None) 317 318 Represent a single frame in the traceback or stack that is being formatted 319 or printed. It may optionally have a stringified version of the frames 320 locals included in it. If *lookup_line* is ``False``, the source code is not 321 looked up until the :class:`FrameSummary` has the :attr:`~FrameSummary.line` 322 attribute accessed (which also happens when casting it to a tuple). 323 :attr:`~FrameSummary.line` may be directly provided, and will prevent line 324 lookups happening at all. *locals* is an optional local variable 325 dictionary, and if supplied the variable representations are stored in the 326 summary for later display. 327 328 .. _traceback-example: 329 330 Traceback Examples 331 ------------------ 332 333 This simple example implements a basic read-eval-print loop, similar to (but 334 less useful than) the standard Python interactive interpreter loop. For a more 335 complete implementation of the interpreter loop, refer to the :mod:`code` 336 module. :: 337 338 import sys, traceback 339 340 def run_user_code(envdir): 341 source = input(">>> ") 342 try: 343 exec(source, envdir) 344 except Exception: 345 print("Exception in user code:") 346 print("-"*60) 347 traceback.print_exc(file=sys.stdout) 348 print("-"*60) 349 350 envdir = {} 351 while True: 352 run_user_code(envdir) 353 354 355 The following example demonstrates the different ways to print and format the 356 exception and traceback: 357 358 .. testcode:: 359 360 import sys, traceback 361 362 def lumberjack(): 363 bright_side_of_death() 364 365 def bright_side_of_death(): 366 return tuple()[0] 367 368 try: 369 lumberjack() 370 except IndexError: 371 exc_type, exc_value, exc_traceback = sys.exc_info() 372 print("*** print_tb:") 373 traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) 374 print("*** print_exception:") 375 traceback.print_exception(exc_type, exc_value, exc_traceback, 376 limit=2, file=sys.stdout) 377 print("*** print_exc:") 378 traceback.print_exc(limit=2, file=sys.stdout) 379 print("*** format_exc, first and last line:") 380 formatted_lines = traceback.format_exc().splitlines() 381 print(formatted_lines[0]) 382 print(formatted_lines[-1]) 383 print("*** format_exception:") 384 print(repr(traceback.format_exception(exc_type, exc_value, 385 exc_traceback))) 386 print("*** extract_tb:") 387 print(repr(traceback.extract_tb(exc_traceback))) 388 print("*** format_tb:") 389 print(repr(traceback.format_tb(exc_traceback))) 390 print("*** tb_lineno:", exc_traceback.tb_lineno) 391 392 The output for the example would look similar to this: 393 394 .. testoutput:: 395 :options: +NORMALIZE_WHITESPACE 396 397 *** print_tb: 398 File "<doctest...>", line 10, in <module> 399 lumberjack() 400 *** print_exception: 401 Traceback (most recent call last): 402 File "<doctest...>", line 10, in <module> 403 lumberjack() 404 File "<doctest...>", line 4, in lumberjack 405 bright_side_of_death() 406 IndexError: tuple index out of range 407 *** print_exc: 408 Traceback (most recent call last): 409 File "<doctest...>", line 10, in <module> 410 lumberjack() 411 File "<doctest...>", line 4, in lumberjack 412 bright_side_of_death() 413 IndexError: tuple index out of range 414 *** format_exc, first and last line: 415 Traceback (most recent call last): 416 IndexError: tuple index out of range 417 *** format_exception: 418 ['Traceback (most recent call last):\n', 419 ' File "<doctest...>", line 10, in <module>\n lumberjack()\n', 420 ' File "<doctest...>", line 4, in lumberjack\n bright_side_of_death()\n', 421 ' File "<doctest...>", line 7, in bright_side_of_death\n return tuple()[0]\n', 422 'IndexError: tuple index out of range\n'] 423 *** extract_tb: 424 [<FrameSummary file <doctest...>, line 10 in <module>>, 425 <FrameSummary file <doctest...>, line 4 in lumberjack>, 426 <FrameSummary file <doctest...>, line 7 in bright_side_of_death>] 427 *** format_tb: 428 [' File "<doctest...>", line 10, in <module>\n lumberjack()\n', 429 ' File "<doctest...>", line 4, in lumberjack\n bright_side_of_death()\n', 430 ' File "<doctest...>", line 7, in bright_side_of_death\n return tuple()[0]\n'] 431 *** tb_lineno: 10 432 433 434 The following example shows the different ways to print and format the stack:: 435 436 >>> import traceback 437 >>> def another_function(): 438 ... lumberstack() 439 ... 440 >>> def lumberstack(): 441 ... traceback.print_stack() 442 ... print(repr(traceback.extract_stack())) 443 ... print(repr(traceback.format_stack())) 444 ... 445 >>> another_function() 446 File "<doctest>", line 10, in <module> 447 another_function() 448 File "<doctest>", line 3, in another_function 449 lumberstack() 450 File "<doctest>", line 6, in lumberstack 451 traceback.print_stack() 452 [('<doctest>', 10, '<module>', 'another_function()'), 453 ('<doctest>', 3, 'another_function', 'lumberstack()'), 454 ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')] 455 [' File "<doctest>", line 10, in <module>\n another_function()\n', 456 ' File "<doctest>", line 3, in another_function\n lumberstack()\n', 457 ' File "<doctest>", line 8, in lumberstack\n print(repr(traceback.format_stack()))\n'] 458 459 460 This last example demonstrates the final few formatting functions: 461 462 .. doctest:: 463 :options: +NORMALIZE_WHITESPACE 464 465 >>> import traceback 466 >>> traceback.format_list([('spam.py', 3, '<module>', 'spam.eggs()'), 467 ... ('eggs.py', 42, 'eggs', 'return "bacon"')]) 468 [' File "spam.py", line 3, in <module>\n spam.eggs()\n', 469 ' File "eggs.py", line 42, in eggs\n return "bacon"\n'] 470 >>> an_error = IndexError('tuple index out of range') 471 >>> traceback.format_exception_only(type(an_error), an_error) 472 ['IndexError: tuple index out of range\n'] 473