2025-08-15 18:14:21 +00:00
<!DOCTYPE html>
< html lang = "en" data-content_root = "../" >
< head >
< meta charset = "utf-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / >
< title > traceback — Evennia latest documentation< / title >
< link rel = "stylesheet" type = "text/css" href = "../_static/pygments.css?v=d75fae25" / >
< link rel = "stylesheet" type = "text/css" href = "../_static/nature.css?v=279e0f84" / >
< link rel = "stylesheet" type = "text/css" href = "../_static/custom.css?v=e4a91a55" / >
< script src = "../_static/documentation_options.js?v=c6e86fd7" > < / script >
< script src = "../_static/doctools.js?v=9bcbadda" > < / script >
< script src = "../_static/sphinx_highlight.js?v=dc90522c" > < / script >
< link rel = "icon" href = "../_static/favicon.ico" / >
< link rel = "index" title = "Index" href = "../genindex.html" / >
< link rel = "search" title = "Search" href = "../search.html" / >
< / head > < body >
< div class = "related" role = "navigation" aria-label = "Related" >
< h3 > Navigation< / h3 >
< ul >
< li class = "right" style = "margin-right: 10px" >
< a href = "../genindex.html" title = "General Index"
accesskey="I">index< / a > < / li >
< li class = "right" >
< a href = "../py-modindex.html" title = "Python Module Index"
>modules< / a > |< / li >
< li class = "nav-item nav-item-0" > < a href = "../index.html" > Evennia< / a > » < / li >
< li class = "nav-item nav-item-1" > < a href = "index.html" accesskey = "U" > Module code< / a > » < / li >
< li class = "nav-item nav-item-this" > < a href = "" > traceback< / a > < / li >
< / ul >
< / div >
< div class = "document" >
< div class = "documentwrapper" >
< div class = "bodywrapper" >
< div class = "body" role = "main" >
< h1 > Source code for traceback< / h1 > < div class = "highlight" > < pre >
< span > < / span > < span class = "sd" > " " " Extract, format and print information about Python stack traces." " " < / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > collections.abc< / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > itertools< / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > linecache< / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > sys< / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > textwrap< / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > warnings< / span >
< span class = "kn" > from< / span > < span class = "w" > < / span > < span class = "nn" > contextlib< / span > < span class = "w" > < / span > < span class = "kn" > import< / span > < span class = "n" > suppress< / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > _colorize< / span >
< span class = "kn" > from< / span > < span class = "w" > < / span > < span class = "nn" > _colorize< / span > < span class = "w" > < / span > < span class = "kn" > import< / span > < span class = "n" > ANSIColors< / span >
< span class = "n" > __all__< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "s1" > ' extract_stack' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' extract_tb' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' format_exception' < / span > < span class = "p" > ,< / span >
< span class = "s1" > ' format_exception_only' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' format_list' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' format_stack' < / span > < span class = "p" > ,< / span >
< span class = "s1" > ' format_tb' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' print_exc' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' format_exc' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' print_exception' < / span > < span class = "p" > ,< / span >
< span class = "s1" > ' print_last' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' print_stack' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' print_tb' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' clear_frames' < / span > < span class = "p" > ,< / span >
< span class = "s1" > ' FrameSummary' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' StackSummary' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' TracebackException' < / span > < span class = "p" > ,< / span >
< span class = "s1" > ' walk_stack' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' walk_tb' < / span > < span class = "p" > ]< / span >
< span class = "c1" > #< / span >
< span class = "c1" > # Formatting and printing lists of traceback lines.< / span >
< span class = "c1" > #< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > print_list< / span > < span class = "p" > (< / span > < span class = "n" > extracted_list< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Print the list of tuples as returned by extract_tb() or< / span >
< span class = "sd" > extract_stack() as a formatted stack trace to the given file." " " < / span >
< span class = "k" > if< / span > < span class = "n" > file< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > stderr< / span >
< span class = "k" > for< / span > < span class = "n" > item< / span > < span class = "ow" > in< / span > < span class = "n" > StackSummary< / span > < span class = "o" > .< / span > < span class = "n" > from_list< / span > < span class = "p" > (< / span > < span class = "n" > extracted_list< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > ():< / span >
< span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > item< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > file< / span > < span class = "p" > ,< / span > < span class = "n" > end< / span > < span class = "o" > =< / span > < span class = "s2" > " " < / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > format_list< / span > < span class = "p" > (< / span > < span class = "n" > extracted_list< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Format a list of tuples or FrameSummary objects for printing.< / span >
< span class = "sd" > Given a list of tuples or FrameSummary objects as returned by< / span >
< span class = "sd" > extract_tb() or extract_stack(), return a list of strings ready< / span >
< span class = "sd" > for printing.< / span >
< span class = "sd" > Each string in the resulting list corresponds to the item with the< / span >
< span class = "sd" > same index in the argument list. Each string ends in a newline;< / span >
< span class = "sd" > the strings may contain internal newlines as well, for those items< / span >
< span class = "sd" > whose source text line is not None.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > return< / span > < span class = "n" > StackSummary< / span > < span class = "o" > .< / span > < span class = "n" > from_list< / span > < span class = "p" > (< / span > < span class = "n" > extracted_list< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > ()< / span >
< span class = "c1" > #< / span >
< span class = "c1" > # Printing and Extracting Tracebacks.< / span >
< span class = "c1" > #< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > print_tb< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Print up to ' limit' stack trace entries from the traceback ' tb' .< / span >
< span class = "sd" > If ' limit' is omitted or None, all entries are printed. If ' file' < / span >
< span class = "sd" > is omitted or None, the output goes to sys.stderr; otherwise< / span >
< span class = "sd" > ' file' should be an open file or file-like object with a write()< / span >
< span class = "sd" > method.< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > print_list< / span > < span class = "p" > (< / span > < span class = "n" > extract_tb< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ),< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > file< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > format_tb< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " A shorthand for ' format_list(extract_tb(tb, limit))' ." " " < / span >
< span class = "k" > return< / span > < span class = "n" > extract_tb< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > ()< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > extract_tb< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " < / span >
< span class = "sd" > Return a StackSummary object representing a list of< / span >
< span class = "sd" > pre-processed entries from traceback.< / span >
< span class = "sd" > This is useful for alternate formatting of stack traces. If< / span >
< span class = "sd" > ' limit' is omitted or None, all entries are extracted. A< / span >
< span class = "sd" > pre-processed stack trace entry is a FrameSummary object< / span >
< span class = "sd" > containing attributes filename, lineno, name, and line< / span >
< span class = "sd" > representing the information that is usually printed for a stack< / span >
< span class = "sd" > trace. The line is a string with leading and trailing< / span >
< span class = "sd" > whitespace stripped; if the source is not available it is None.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > return< / span > < span class = "n" > StackSummary< / span > < span class = "o" > .< / span > < span class = "n" > _extract_from_extended_frame_gen< / span > < span class = "p" > (< / span >
< span class = "n" > _walk_tb_with_full_positions< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "p" > ),< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > )< / span >
< span class = "c1" > #< / span >
< span class = "c1" > # Exception formatting and output.< / span >
< span class = "c1" > #< / span >
< span class = "n" > _cause_message< / span > < span class = "o" > =< / span > < span class = "p" > (< / span >
< span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > The above exception was the direct cause " < / span >
< span class = "s2" > " of the following exception:< / span > < span class = "se" > \n\n< / span > < span class = "s2" > " < / span > < span class = "p" > )< / span >
< span class = "n" > _context_message< / span > < span class = "o" > =< / span > < span class = "p" > (< / span >
< span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > During handling of the above exception, " < / span >
< span class = "s2" > " another exception occurred:< / span > < span class = "se" > \n\n< / span > < span class = "s2" > " < / span > < span class = "p" > )< / span >
< span class = "k" > class< / span > < span class = "w" > < / span > < span class = "nc" > _Sentinel< / span > < span class = "p" > :< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __repr__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "s2" > " < implicit> " < / span >
< span class = "n" > _sentinel< / span > < span class = "o" > =< / span > < span class = "n" > _Sentinel< / span > < span class = "p" > ()< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _parse_value_tb< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "ow" > is< / span > < span class = "n" > _sentinel< / span > < span class = "p" > )< / span > < span class = "o" > !=< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "ow" > is< / span > < span class = "n" > _sentinel< / span > < span class = "p" > ):< / span >
< span class = "k" > raise< / span > < span class = "ne" > ValueError< / span > < span class = "p" > (< / span > < span class = "s2" > " Both or neither of value and tb must be given" < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > value< / span > < span class = "ow" > is< / span > < span class = "n" > tb< / span > < span class = "ow" > is< / span > < span class = "n" > _sentinel< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > exc< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "ne" > BaseException< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > __traceback__< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "sa" > f< / span > < span class = "s1" > ' Exception expected for value, ' < / span >
< span class = "sa" > f< / span > < span class = "s1" > ' < / span > < span class = "si" > {< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "vm" > __name__< / span > < span class = "si" > }< / span > < span class = "s1" > found' < / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span >
< span class = "k" > return< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > print_exception< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "o" > /< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > _sentinel< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "o" > =< / span > < span class = "n" > _sentinel< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > \
< span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Print exception up to ' limit' stack trace entries from ' tb' to ' file' .< / span >
< span class = "sd" > This differs from print_tb() in the following ways: (1) if< / span >
< span class = "sd" > traceback is not None, it prints a header " Traceback (most recent< / span >
< span class = "sd" > call last):" ; (2) it prints the exception type and value after the< / span >
< span class = "sd" > stack trace; (3) if type is SyntaxError and value has the< / span >
< span class = "sd" > appropriate format, it prints the line where the syntax error< / span >
< span class = "sd" > occurred with a caret on the next line indicating the approximate< / span >
< span class = "sd" > position of the error.< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " colorize" < / span > < span class = "p" > ,< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "o" > =< / span > < span class = "n" > _parse_value_tb< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "p" > )< / span >
< span class = "n" > te< / span > < span class = "o" > =< / span > < span class = "n" > TracebackException< / span > < span class = "p" > (< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ),< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span > < span class = "n" > compact< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > )< / span >
< span class = "n" > te< / span > < span class = "o" > .< / span > < span class = "n" > print< / span > < span class = "p" > (< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > file< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "n" > chain< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > )< / span >
< span class = "n" > BUILTIN_EXCEPTION_LIMIT< / span > < span class = "o" > =< / span > < span class = "nb" > object< / span > < span class = "p" > ()< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _print_exception_bltin< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "o" > /< / span > < span class = "p" > ):< / span >
< span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > stderr< / span > < span class = "k" > if< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > stderr< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "k" > else< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > __stderr__< / span >
< span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > _colorize< / span > < span class = "o" > .< / span > < span class = "n" > can_colorize< / span > < span class = "p" > (< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > file< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > print_exception< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > BUILTIN_EXCEPTION_LIMIT< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > file< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > format_exception< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "o" > /< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > _sentinel< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "o" > =< / span > < span class = "n" > _sentinel< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > \
< span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Format a stack trace and the exception information.< / span >
< span class = "sd" > The arguments have the same meaning as the corresponding arguments< / span >
< span class = "sd" > to print_exception(). The return value is a list of strings, each< / span >
< span class = "sd" > ending in a newline and some containing internal newlines. When< / span >
< span class = "sd" > these lines are concatenated and printed, exactly the same text is< / span >
< span class = "sd" > printed as does print_exception().< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " colorize" < / span > < span class = "p" > ,< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "o" > =< / span > < span class = "n" > _parse_value_tb< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "p" > )< / span >
< span class = "n" > te< / span > < span class = "o" > =< / span > < span class = "n" > TracebackException< / span > < span class = "p" > (< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ),< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span > < span class = "n" > compact< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > te< / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "n" > chain< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > ))< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > format_exception_only< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "o" > /< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > _sentinel< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "p" > ,< / span > < span class = "n" > show_group< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Format the exception part of a traceback.< / span >
< span class = "sd" > The return value is a list of strings, each ending in a newline.< / span >
< span class = "sd" > The list contains the exception' s message, which is< / span >
< span class = "sd" > normally a single string; however, for :exc:`SyntaxError` exceptions, it< / span >
< span class = "sd" > contains several lines that (when printed) display detailed information< / span >
< span class = "sd" > about where the syntax error occurred. Following the message, the list< / span >
< span class = "sd" > contains the exception' s ``__notes__``.< / span >
< span class = "sd" > When *show_group* is ``True``, and the exception is an instance of< / span >
< span class = "sd" > :exc:`BaseExceptionGroup`, the nested exceptions are included as< / span >
< span class = "sd" > well, recursively, with indentation relative to their nesting depth.< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " colorize" < / span > < span class = "p" > ,< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > value< / span > < span class = "ow" > is< / span > < span class = "n" > _sentinel< / span > < span class = "p" > :< / span >
< span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > exc< / span >
< span class = "n" > te< / span > < span class = "o" > =< / span > < span class = "n" > TracebackException< / span > < span class = "p" > (< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ),< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > compact< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > te< / span > < span class = "o" > .< / span > < span class = "n" > format_exception_only< / span > < span class = "p" > (< / span > < span class = "n" > show_group< / span > < span class = "o" > =< / span > < span class = "n" > show_group< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > ))< / span >
< span class = "c1" > # -- not official API but folk probably use these two functions.< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _format_final_exc_line< / span > < span class = "p" > (< / span > < span class = "n" > etype< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "p" > ,< / span > < span class = "n" > insert_final_newline< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ):< / span >
< span class = "n" > valuestr< / span > < span class = "o" > =< / span > < span class = "n" > _safe_string< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "s1" > ' exception' < / span > < span class = "p" > )< / span >
< span class = "n" > end_char< / span > < span class = "o" > =< / span > < span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "k" > if< / span > < span class = "n" > insert_final_newline< / span > < span class = "k" > else< / span > < span class = "s2" > " " < / span >
< span class = "k" > if< / span > < span class = "n" > colorize< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > value< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "ow" > or< / span > < span class = "ow" > not< / span > < span class = "n" > valuestr< / span > < span class = "p" > :< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "sa" > f< / span > < span class = "s2" > " < / span > < span class = "si" > {< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > BOLD_MAGENTA< / span > < span class = "si" > }{< / span > < span class = "n" > etype< / span > < span class = "si" > }{< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "si" > }{< / span > < span class = "n" > end_char< / span > < span class = "si" > }< / span > < span class = "s2" > " < / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "sa" > f< / span > < span class = "s2" > " < / span > < span class = "si" > {< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > BOLD_MAGENTA< / span > < span class = "si" > }{< / span > < span class = "n" > etype< / span > < span class = "si" > }{< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "si" > }< / span > < span class = "s2" > : < / span > < span class = "si" > {< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > MAGENTA< / span > < span class = "si" > }{< / span > < span class = "n" > valuestr< / span > < span class = "si" > }{< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "si" > }{< / span > < span class = "n" > end_char< / span > < span class = "si" > }< / span > < span class = "s2" > " < / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > value< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "ow" > or< / span > < span class = "ow" > not< / span > < span class = "n" > valuestr< / span > < span class = "p" > :< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "sa" > f< / span > < span class = "s2" > " < / span > < span class = "si" > {< / span > < span class = "n" > etype< / span > < span class = "si" > }{< / span > < span class = "n" > end_char< / span > < span class = "si" > }< / span > < span class = "s2" > " < / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "sa" > f< / span > < span class = "s2" > " < / span > < span class = "si" > {< / span > < span class = "n" > etype< / span > < span class = "si" > }< / span > < span class = "s2" > : < / span > < span class = "si" > {< / span > < span class = "n" > valuestr< / span > < span class = "si" > }{< / span > < span class = "n" > end_char< / span > < span class = "si" > }< / span > < span class = "s2" > " < / span >
< span class = "k" > return< / span > < span class = "n" > line< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _safe_string< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > what< / span > < span class = "p" > ,< / span > < span class = "n" > func< / span > < span class = "o" > =< / span > < span class = "nb" > str< / span > < span class = "p" > ):< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > func< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "sa" > f< / span > < span class = "s1" > ' < < / span > < span class = "si" > {< / span > < span class = "n" > what< / span > < span class = "si" > }< / span > < span class = "s1" > < / span > < span class = "si" > {< / span > < span class = "n" > func< / span > < span class = "o" > .< / span > < span class = "vm" > __name__< / span > < span class = "si" > }< / span > < span class = "s1" > () failed> ' < / span >
< span class = "c1" > # --< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > print_exc< / span > < span class = "p" > (< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Shorthand for ' print_exception(sys.exception(), limit=limit, file=file, chain=chain)' ." " " < / span >
< span class = "n" > print_exception< / span > < span class = "p" > (< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > exception< / span > < span class = "p" > (),< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > file< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "n" > chain< / span > < span class = "p" > )< / span >
< div class = "viewcode-block" id = "format_exc" >
< a class = "viewcode-back" href = "../api/evennia.commands.cmdsethandler.html#evennia.commands.cmdhandler.format_exc" > [docs]< / a >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > format_exc< / span > < span class = "p" > (< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Like print_exc() but return a string." " " < / span >
< span class = "k" > return< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > format_exception< / span > < span class = "p" > (< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > exception< / span > < span class = "p" > (),< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "n" > chain< / span > < span class = "p" > ))< / span > < / div >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > print_last< / span > < span class = "p" > (< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " This is a shorthand for ' print_exception(sys.last_exc, limit=limit, file=file, chain=chain)' ." " " < / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > hasattr< / span > < span class = "p" > (< / span > < span class = "n" > sys< / span > < span class = "p" > ,< / span > < span class = "s2" > " last_exc" < / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "nb" > hasattr< / span > < span class = "p" > (< / span > < span class = "n" > sys< / span > < span class = "p" > ,< / span > < span class = "s2" > " last_type" < / span > < span class = "p" > ):< / span >
< span class = "k" > raise< / span > < span class = "ne" > ValueError< / span > < span class = "p" > (< / span > < span class = "s2" > " no last exception" < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "nb" > hasattr< / span > < span class = "p" > (< / span > < span class = "n" > sys< / span > < span class = "p" > ,< / span > < span class = "s2" > " last_exc" < / span > < span class = "p" > ):< / span >
< span class = "n" > print_exception< / span > < span class = "p" > (< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > last_exc< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > file< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "n" > chain< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > print_exception< / span > < span class = "p" > (< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > last_type< / span > < span class = "p" > ,< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > last_value< / span > < span class = "p" > ,< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > last_traceback< / span > < span class = "p" > ,< / span >
< span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > file< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "n" > chain< / span > < span class = "p" > )< / span >
< span class = "c1" > #< / span >
< span class = "c1" > # Printing and Extracting Stacks.< / span >
< span class = "c1" > #< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > print_stack< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Print a stack trace from its invocation point.< / span >
< span class = "sd" > The optional ' f' argument can be used to specify an alternate< / span >
< span class = "sd" > stack frame at which to start. The optional ' limit' and ' file' < / span >
< span class = "sd" > arguments have the same meaning as for print_exception().< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "n" > f< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > f< / span > < span class = "o" > =< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > _getframe< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > f_back< / span >
< span class = "n" > print_list< / span > < span class = "p" > (< / span > < span class = "n" > extract_stack< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ),< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > file< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > format_stack< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Shorthand for ' format_list(extract_stack(f, limit))' ." " " < / span >
< span class = "k" > if< / span > < span class = "n" > f< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > f< / span > < span class = "o" > =< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > _getframe< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > f_back< / span >
< span class = "k" > return< / span > < span class = "n" > format_list< / span > < span class = "p" > (< / span > < span class = "n" > extract_stack< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ))< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > extract_stack< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Extract the raw traceback from the current stack frame.< / span >
< span class = "sd" > The return value has the same format as for extract_tb(). The< / span >
< span class = "sd" > optional ' f' and ' limit' arguments have the same meaning as for< / span >
< span class = "sd" > print_stack(). Each item in the list is a quadruple (filename,< / span >
< span class = "sd" > line number, function name, text), and the entries are in order< / span >
< span class = "sd" > from oldest to newest stack frame.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "n" > f< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > f< / span > < span class = "o" > =< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > _getframe< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > f_back< / span >
< span class = "n" > stack< / span > < span class = "o" > =< / span > < span class = "n" > StackSummary< / span > < span class = "o" > .< / span > < span class = "n" > extract< / span > < span class = "p" > (< / span > < span class = "n" > walk_stack< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "p" > ),< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > )< / span >
< span class = "n" > stack< / span > < span class = "o" > .< / span > < span class = "n" > reverse< / span > < span class = "p" > ()< / span >
< span class = "k" > return< / span > < span class = "n" > stack< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > clear_frames< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "p" > ):< / span >
< span class = "s2" > " Clear all references to local variables in the frames of a traceback." < / span >
< span class = "k" > while< / span > < span class = "n" > tb< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_frame< / span > < span class = "o" > .< / span > < span class = "n" > clear< / span > < span class = "p" > ()< / span >
< span class = "k" > except< / span > < span class = "ne" > RuntimeError< / span > < span class = "p" > :< / span >
< span class = "c1" > # Ignore the exception raised if the frame is still executing.< / span >
< span class = "k" > pass< / span >
< span class = "n" > tb< / span > < span class = "o" > =< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_next< / span >
< span class = "k" > class< / span > < span class = "w" > < / span > < span class = "nc" > FrameSummary< / span > < span class = "p" > :< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Information about a single frame from a traceback.< / span >
< span class = "sd" > - :attr:`filename` The filename for the frame.< / span >
< span class = "sd" > - :attr:`lineno` The line within filename for the frame that was< / span >
< span class = "sd" > active when the frame was captured.< / span >
< span class = "sd" > - :attr:`name` The name of the function or method that was executing< / span >
< span class = "sd" > when the frame was captured.< / span >
< span class = "sd" > - :attr:`line` The text from the linecache module for the< / span >
< span class = "sd" > of code that was running when the frame was captured.< / span >
< span class = "sd" > - :attr:`locals` Either None if locals were not supplied, or a dict< / span >
< span class = "sd" > mapping the name to the repr() of the variable.< / span >
< span class = "sd" > " " " < / span >
< span class = "vm" > __slots__< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "s1" > ' filename' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' lineno' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' end_lineno' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' colno' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' end_colno' < / span > < span class = "p" > ,< / span >
< span class = "s1" > ' name' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' _lines' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' _lines_dedented' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' locals' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' _code' < / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "p" > ,< / span > < span class = "n" > lookup_line< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span >
< span class = "nb" > locals< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< span class = "n" > end_lineno< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > colno< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > end_colno< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Construct a FrameSummary.< / span >
< span class = "sd" > :param lookup_line: If True, `linecache` is consulted for the source< / span >
< span class = "sd" > code line. Otherwise, the line will be looked up when first needed.< / span >
< span class = "sd" > :param locals: If supplied the frame locals, which will be captured as< / span >
< span class = "sd" > object representations.< / span >
< span class = "sd" > :param line: If provided, use this instead of looking up the line in< / span >
< span class = "sd" > the linecache.< / span >
< span class = "sd" > " " " < / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "o" > =< / span > < span class = "n" > filename< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "o" > =< / span > < span class = "n" > lineno< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > end_lineno< / span > < span class = "o" > =< / span > < span class = "n" > lineno< / span > < span class = "k" > if< / span > < span class = "n" > end_lineno< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "k" > else< / span > < span class = "n" > end_lineno< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > colno< / span > < span class = "o" > =< / span > < span class = "n" > colno< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > end_colno< / span > < span class = "o" > =< / span > < span class = "n" > end_colno< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "n" > name< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _code< / span > < span class = "o" > =< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " _code" < / span > < span class = "p" > )< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines< / span > < span class = "o" > =< / span > < span class = "n" > line< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines_dedented< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "k" > if< / span > < span class = "n" > lookup_line< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > line< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > locals< / span > < span class = "o" > =< / span > < span class = "p" > {< / span > < span class = "n" > k< / span > < span class = "p" > :< / span > < span class = "n" > _safe_string< / span > < span class = "p" > (< / span > < span class = "n" > v< / span > < span class = "p" > ,< / span > < span class = "s1" > ' local' < / span > < span class = "p" > ,< / span > < span class = "n" > func< / span > < span class = "o" > =< / span > < span class = "nb" > repr< / span > < span class = "p" > )< / span >
< span class = "k" > for< / span > < span class = "n" > k< / span > < span class = "p" > ,< / span > < span class = "n" > v< / span > < span class = "ow" > in< / span > < span class = "nb" > locals< / span > < span class = "o" > .< / span > < span class = "n" > items< / span > < span class = "p" > ()}< / span > < span class = "k" > if< / span > < span class = "nb" > locals< / span > < span class = "k" > else< / span > < span class = "kc" > None< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __eq__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > other< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > other< / span > < span class = "p" > ,< / span > < span class = "n" > FrameSummary< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "o" > ==< / span > < span class = "n" > other< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "ow" > and< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "o" > ==< / span > < span class = "n" > other< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "ow" > and< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "o" > ==< / span > < span class = "n" > other< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "ow" > and< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > locals< / span > < span class = "o" > ==< / span > < span class = "n" > other< / span > < span class = "o" > .< / span > < span class = "n" > locals< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > other< / span > < span class = "p" > ,< / span > < span class = "nb" > tuple< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > line< / span > < span class = "p" > )< / span > < span class = "o" > ==< / span > < span class = "n" > other< / span >
< span class = "k" > return< / span > < span class = "bp" > NotImplemented< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __getitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > pos< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > line< / span > < span class = "p" > )[< / span > < span class = "n" > pos< / span > < span class = "p" > ]< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __iter__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "nb" > iter< / span > < span class = "p" > ([< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > line< / span > < span class = "p" > ])< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __repr__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "s2" > " < FrameSummary file < / span > < span class = "si" > {filename}< / span > < span class = "s2" > , line < / span > < span class = "si" > {lineno}< / span > < span class = "s2" > in < / span > < span class = "si" > {name}< / span > < span class = "s2" > > " < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span >
< span class = "n" > filename< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "n" > lineno< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __len__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "mi" > 4< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _set_lines< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span >
< span class = "ow" > and< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span >
< span class = "ow" > and< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > end_lineno< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span >
< span class = "p" > ):< / span >
< span class = "n" > lines< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "k" > for< / span > < span class = "n" > lineno< / span > < span class = "ow" > in< / span > < span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > end_lineno< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "p" > ):< / span >
< span class = "c1" > # treat errors (empty string) and empty lines (newline) as the same< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > linecache< / span > < span class = "o" > .< / span > < span class = "n" > getline< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "n" > lineno< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > rstrip< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > line< / span > < span class = "ow" > and< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _code< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "o" > .< / span > < span class = "n" > startswith< / span > < span class = "p" > (< / span > < span class = "s2" > " < " < / span > < span class = "p" > ):< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > linecache< / span > < span class = "o" > .< / span > < span class = "n" > _getline_from_code< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _code< / span > < span class = "p" > ,< / span > < span class = "n" > lineno< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > rstrip< / span > < span class = "p" > ()< / span >
< span class = "n" > lines< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines< / span > < span class = "o" > =< / span > < span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > lines< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span >
< span class = "nd" > @property< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _original_lines< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "c1" > # Returns the line as-is from the source, without modifying whitespace.< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _set_lines< / span > < span class = "p" > ()< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines< / span >
< span class = "nd" > @property< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _dedented_lines< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "c1" > # Returns _original_lines, but dedented< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _set_lines< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines_dedented< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines_dedented< / span > < span class = "o" > =< / span > < span class = "n" > textwrap< / span > < span class = "o" > .< / span > < span class = "n" > dedent< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines_dedented< / span >
< span class = "nd" > @property< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > line< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _set_lines< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "c1" > # return only the first line, stripped< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _lines< / span > < span class = "o" > .< / span > < span class = "n" > partition< / span > < span class = "p" > (< / span > < span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "p" > )[< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > strip< / span > < span class = "p" > ()< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > walk_stack< / span > < span class = "p" > (< / span > < span class = "n" > f< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Walk a stack yielding the frame and line number for each frame.< / span >
< span class = "sd" > This will follow f.f_back from the given frame. If no frame is given, the< / span >
< span class = "sd" > current stack is used. Usually used with StackSummary.extract.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "n" > f< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > f< / span > < span class = "o" > =< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > _getframe< / span > < span class = "p" > ()< / span > < span class = "o" > .< / span > < span class = "n" > f_back< / span > < span class = "o" > .< / span > < span class = "n" > f_back< / span > < span class = "o" > .< / span > < span class = "n" > f_back< / span > < span class = "o" > .< / span > < span class = "n" > f_back< / span >
< span class = "k" > while< / span > < span class = "n" > f< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "n" > f< / span > < span class = "p" > ,< / span > < span class = "n" > f< / span > < span class = "o" > .< / span > < span class = "n" > f_lineno< / span >
< span class = "n" > f< / span > < span class = "o" > =< / span > < span class = "n" > f< / span > < span class = "o" > .< / span > < span class = "n" > f_back< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > walk_tb< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Walk a traceback yielding the frame and line number for each frame.< / span >
< span class = "sd" > This will follow tb.tb_next (and thus is in the opposite order to< / span >
< span class = "sd" > walk_stack). Usually used with StackSummary.extract.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > while< / span > < span class = "n" > tb< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_frame< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_lineno< / span >
< span class = "n" > tb< / span > < span class = "o" > =< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_next< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _walk_tb_with_full_positions< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "p" > ):< / span >
< span class = "c1" > # Internal version of walk_tb that yields full code positions including< / span >
< span class = "c1" > # end line and column information.< / span >
< span class = "k" > while< / span > < span class = "n" > tb< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > positions< / span > < span class = "o" > =< / span > < span class = "n" > _get_code_position< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_frame< / span > < span class = "o" > .< / span > < span class = "n" > f_code< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_lasti< / span > < span class = "p" > )< / span >
< span class = "c1" > # Yield tb_lineno when co_positions does not have a line number to< / span >
< span class = "c1" > # maintain behavior with walk_tb.< / span >
< span class = "k" > if< / span > < span class = "n" > positions< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_frame< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_lineno< / span > < span class = "p" > ,< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "n" > positions< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > :]< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_frame< / span > < span class = "p" > ,< / span > < span class = "n" > positions< / span >
< span class = "n" > tb< / span > < span class = "o" > =< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_next< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _get_code_position< / span > < span class = "p" > (< / span > < span class = "n" > code< / span > < span class = "p" > ,< / span > < span class = "n" > instruction_index< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > instruction_index< / span > < span class = "o" > < < / span > < span class = "mi" > 0< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< span class = "n" > positions_gen< / span > < span class = "o" > =< / span > < span class = "n" > code< / span > < span class = "o" > .< / span > < span class = "n" > co_positions< / span > < span class = "p" > ()< / span >
< span class = "k" > return< / span > < span class = "nb" > next< / span > < span class = "p" > (< / span > < span class = "n" > itertools< / span > < span class = "o" > .< / span > < span class = "n" > islice< / span > < span class = "p" > (< / span > < span class = "n" > positions_gen< / span > < span class = "p" > ,< / span > < span class = "n" > instruction_index< / span > < span class = "o" > //< / span > < span class = "mi" > 2< / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > ))< / span >
< span class = "n" > _RECURSIVE_CUTOFF< / span > < span class = "o" > =< / span > < span class = "mi" > 3< / span > < span class = "c1" > # Also hardcoded in traceback.c.< / span >
< span class = "k" > class< / span > < span class = "w" > < / span > < span class = "nc" > StackSummary< / span > < span class = "p" > (< / span > < span class = "nb" > list< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " A list of FrameSummary objects, representing a stack of frames." " " < / span >
< span class = "nd" > @classmethod< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > extract< / span > < span class = "p" > (< / span > < span class = "n" > klass< / span > < span class = "p" > ,< / span > < span class = "n" > frame_gen< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > lookup_lines< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span >
< span class = "n" > capture_locals< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Create a StackSummary from a traceback or stack object.< / span >
< span class = "sd" > :param frame_gen: A generator that yields (frame, lineno) tuples< / span >
< span class = "sd" > whose summaries are to be included in the stack.< / span >
< span class = "sd" > :param limit: None to include all frames or the number of frames to< / span >
< span class = "sd" > include.< / span >
< span class = "sd" > :param lookup_lines: If True, lookup lines for each frame immediately,< / span >
< span class = "sd" > otherwise lookup is deferred until the frame is rendered.< / span >
< span class = "sd" > :param capture_locals: If True, the local variables from each frame will< / span >
< span class = "sd" > be captured as object representations into the FrameSummary.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > extended_frame_gen< / span > < span class = "p" > ():< / span >
< span class = "k" > for< / span > < span class = "n" > f< / span > < span class = "p" > ,< / span > < span class = "n" > lineno< / span > < span class = "ow" > in< / span > < span class = "n" > frame_gen< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "n" > f< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > klass< / span > < span class = "o" > .< / span > < span class = "n" > _extract_from_extended_frame_gen< / span > < span class = "p" > (< / span >
< span class = "n" > extended_frame_gen< / span > < span class = "p" > (),< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span > < span class = "n" > lookup_lines< / span > < span class = "o" > =< / span > < span class = "n" > lookup_lines< / span > < span class = "p" > ,< / span >
< span class = "n" > capture_locals< / span > < span class = "o" > =< / span > < span class = "n" > capture_locals< / span > < span class = "p" > )< / span >
< span class = "nd" > @classmethod< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _extract_from_extended_frame_gen< / span > < span class = "p" > (< / span > < span class = "n" > klass< / span > < span class = "p" > ,< / span > < span class = "n" > frame_gen< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< span class = "n" > lookup_lines< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span > < span class = "n" > capture_locals< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ):< / span >
< span class = "c1" > # Same as extract but operates on a frame generator that yields< / span >
< span class = "c1" > # (frame, (lineno, end_lineno, colno, end_colno)) in the stack.< / span >
< span class = "c1" > # Only lineno is required, the remaining fields can be None if the< / span >
< span class = "c1" > # information is not available.< / span >
< span class = "n" > builtin_limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "ow" > is< / span > < span class = "n" > BUILTIN_EXCEPTION_LIMIT< / span >
< span class = "k" > if< / span > < span class = "n" > limit< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "ow" > or< / span > < span class = "n" > builtin_limit< / span > < span class = "p" > :< / span >
< span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "n" > sys< / span > < span class = "p" > ,< / span > < span class = "s1" > ' tracebacklimit' < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > limit< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span > < span class = "n" > limit< / span > < span class = "o" > < < / span > < span class = "mi" > 0< / span > < span class = "p" > :< / span >
< span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "k" > if< / span > < span class = "n" > limit< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > builtin_limit< / span > < span class = "p" > :< / span >
< span class = "n" > frame_gen< / span > < span class = "o" > =< / span > < span class = "nb" > tuple< / span > < span class = "p" > (< / span > < span class = "n" > frame_gen< / span > < span class = "p" > )< / span >
< span class = "n" > frame_gen< / span > < span class = "o" > =< / span > < span class = "n" > frame_gen< / span > < span class = "p" > [< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > frame_gen< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "n" > limit< / span > < span class = "p" > :]< / span >
< span class = "k" > elif< / span > < span class = "n" > limit< / span > < span class = "o" > > =< / span > < span class = "mi" > 0< / span > < span class = "p" > :< / span >
< span class = "n" > frame_gen< / span > < span class = "o" > =< / span > < span class = "n" > itertools< / span > < span class = "o" > .< / span > < span class = "n" > islice< / span > < span class = "p" > (< / span > < span class = "n" > frame_gen< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > frame_gen< / span > < span class = "o" > =< / span > < span class = "n" > collections< / span > < span class = "o" > .< / span > < span class = "n" > deque< / span > < span class = "p" > (< / span > < span class = "n" > frame_gen< / span > < span class = "p" > ,< / span > < span class = "n" > maxlen< / span > < span class = "o" > =-< / span > < span class = "n" > limit< / span > < span class = "p" > )< / span >
< span class = "n" > result< / span > < span class = "o" > =< / span > < span class = "n" > klass< / span > < span class = "p" > ()< / span >
< span class = "n" > fnames< / span > < span class = "o" > =< / span > < span class = "nb" > set< / span > < span class = "p" > ()< / span >
< span class = "k" > for< / span > < span class = "n" > f< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > end_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > colno< / span > < span class = "p" > ,< / span > < span class = "n" > end_colno< / span > < span class = "p" > )< / span > < span class = "ow" > in< / span > < span class = "n" > frame_gen< / span > < span class = "p" > :< / span >
< span class = "n" > co< / span > < span class = "o" > =< / span > < span class = "n" > f< / span > < span class = "o" > .< / span > < span class = "n" > f_code< / span >
< span class = "n" > filename< / span > < span class = "o" > =< / span > < span class = "n" > co< / span > < span class = "o" > .< / span > < span class = "n" > co_filename< / span >
< span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "n" > co< / span > < span class = "o" > .< / span > < span class = "n" > co_name< / span >
< span class = "n" > fnames< / span > < span class = "o" > .< / span > < span class = "n" > add< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > )< / span >
< span class = "n" > linecache< / span > < span class = "o" > .< / span > < span class = "n" > lazycache< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "n" > f< / span > < span class = "o" > .< / span > < span class = "n" > f_globals< / span > < span class = "p" > )< / span >
< span class = "c1" > # Must defer line lookups until we have called checkcache.< / span >
< span class = "k" > if< / span > < span class = "n" > capture_locals< / span > < span class = "p" > :< / span >
< span class = "n" > f_locals< / span > < span class = "o" > =< / span > < span class = "n" > f< / span > < span class = "o" > .< / span > < span class = "n" > f_locals< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > f_locals< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "n" > result< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span >
< span class = "n" > FrameSummary< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span >
< span class = "n" > lookup_line< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span > < span class = "nb" > locals< / span > < span class = "o" > =< / span > < span class = "n" > f_locals< / span > < span class = "p" > ,< / span >
< span class = "n" > end_lineno< / span > < span class = "o" > =< / span > < span class = "n" > end_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > colno< / span > < span class = "o" > =< / span > < span class = "n" > colno< / span > < span class = "p" > ,< / span > < span class = "n" > end_colno< / span > < span class = "o" > =< / span > < span class = "n" > end_colno< / span > < span class = "p" > ,< / span >
< span class = "n" > _code< / span > < span class = "o" > =< / span > < span class = "n" > f< / span > < span class = "o" > .< / span > < span class = "n" > f_code< / span > < span class = "p" > ,< / span >
< span class = "p" > )< / span >
< span class = "p" > )< / span >
< span class = "k" > for< / span > < span class = "n" > filename< / span > < span class = "ow" > in< / span > < span class = "n" > fnames< / span > < span class = "p" > :< / span >
< span class = "n" > linecache< / span > < span class = "o" > .< / span > < span class = "n" > checkcache< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > )< / span >
< span class = "c1" > # If immediate lookup was desired, trigger lookups now.< / span >
< span class = "k" > if< / span > < span class = "n" > lookup_lines< / span > < span class = "p" > :< / span >
< span class = "k" > for< / span > < span class = "n" > f< / span > < span class = "ow" > in< / span > < span class = "n" > result< / span > < span class = "p" > :< / span >
< span class = "n" > f< / span > < span class = "o" > .< / span > < span class = "n" > line< / span >
< span class = "k" > return< / span > < span class = "n" > result< / span >
< span class = "nd" > @classmethod< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > from_list< / span > < span class = "p" > (< / span > < span class = "n" > klass< / span > < span class = "p" > ,< / span > < span class = "n" > a_list< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " < / span >
< span class = "sd" > Create a StackSummary object from a supplied list of< / span >
< span class = "sd" > FrameSummary objects or old-style list of tuples.< / span >
< span class = "sd" > " " " < / span >
< span class = "c1" > # While doing a fast-path check for isinstance(a_list, StackSummary) is< / span >
< span class = "c1" > # appealing, idlelib.run.cleanup_traceback and other similar code may< / span >
< span class = "c1" > # break this by making arbitrary frames plain tuples, so we need to< / span >
< span class = "c1" > # check on a frame by frame basis.< / span >
< span class = "n" > result< / span > < span class = "o" > =< / span > < span class = "n" > StackSummary< / span > < span class = "p" > ()< / span >
< span class = "k" > for< / span > < span class = "n" > frame< / span > < span class = "ow" > in< / span > < span class = "n" > a_list< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > frame< / span > < span class = "p" > ,< / span > < span class = "n" > FrameSummary< / span > < span class = "p" > ):< / span >
< span class = "n" > result< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > frame< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > frame< / span >
< span class = "n" > result< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > FrameSummary< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > line< / span > < span class = "p" > ))< / span >
< span class = "k" > return< / span > < span class = "n" > result< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > format_frame_summary< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > frame_summary< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Format the lines for a single FrameSummary.< / span >
< span class = "sd" > Returns a string representing one frame involved in the stack. This< / span >
< span class = "sd" > gets called for every frame to be printed in the stack summary.< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " colorize" < / span > < span class = "p" > ,< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "n" > row< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > filename< / span > < span class = "o" > =< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span >
2026-01-12 16:26:53 +00:00
< span class = "k" > if< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "o" > .< / span > < span class = "n" > startswith< / span > < span class = "p" > (< / span > < span class = "s2" > " < stdin-" < / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "o" > .< / span > < span class = "n" > endswith< / span > < span class = "p" > (< / span > < span class = "s1" > ' > ' < / span > < span class = "p" > ):< / span >
2025-08-15 18:14:21 +00:00
< span class = "n" > filename< / span > < span class = "o" > =< / span > < span class = "s2" > " < stdin> " < / span >
< span class = "k" > if< / span > < span class = "n" > colorize< / span > < span class = "p" > :< / span >
< span class = "n" > row< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "s1" > ' File < / span > < span class = "si" > {}< / span > < span class = "s1" > " < / span > < span class = "si" > {}< / span > < span class = "s1" > " < / span > < span class = "si" > {}< / span > < span class = "s1" > , line < / span > < span class = "si" > {}{}{}< / span > < span class = "s1" > , in < / span > < span class = "si" > {}{}{}< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > MAGENTA< / span > < span class = "p" > ,< / span >
< span class = "n" > filename< / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > MAGENTA< / span > < span class = "p" > ,< / span >
< span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > MAGENTA< / span > < span class = "p" > ,< / span >
< span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > ,< / span >
< span class = "p" > )< / span >
< span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > row< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "s1" > ' File " < / span > < span class = "si" > {}< / span > < span class = "s1" > " , line < / span > < span class = "si" > {}< / span > < span class = "s1" > , in < / span > < span class = "si" > {}< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span >
< span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > ))< / span >
< span class = "k" > if< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > _dedented_lines< / span > < span class = "ow" > and< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > _dedented_lines< / span > < span class = "o" > .< / span > < span class = "n" > strip< / span > < span class = "p" > ():< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span >
< span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > colno< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "ow" > or< / span >
< span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > end_colno< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span >
< span class = "p" > ):< / span >
< span class = "c1" > # only output first line if column information is missing< / span >
< span class = "n" > row< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > textwrap< / span > < span class = "o" > .< / span > < span class = "n" > indent< / span > < span class = "p" > (< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > line< / span > < span class = "p" > ,< / span > < span class = "s1" > ' ' < / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c1" > # get first and last line< / span >
< span class = "n" > all_lines_original< / span > < span class = "o" > =< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > _original_lines< / span > < span class = "o" > .< / span > < span class = "n" > splitlines< / span > < span class = "p" > ()< / span >
< span class = "n" > first_line< / span > < span class = "o" > =< / span > < span class = "n" > all_lines_original< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< span class = "c1" > # assume all_lines_original has enough lines (since we constructed it)< / span >
< span class = "n" > last_line< / span > < span class = "o" > =< / span > < span class = "n" > all_lines_original< / span > < span class = "p" > [< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > end_lineno< / span > < span class = "o" > -< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "p" > ]< / span >
< span class = "c1" > # character index of the start/end of the instruction< / span >
< span class = "n" > start_offset< / span > < span class = "o" > =< / span > < span class = "n" > _byte_offset_to_character_offset< / span > < span class = "p" > (< / span > < span class = "n" > first_line< / span > < span class = "p" > ,< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > colno< / span > < span class = "p" > )< / span >
< span class = "n" > end_offset< / span > < span class = "o" > =< / span > < span class = "n" > _byte_offset_to_character_offset< / span > < span class = "p" > (< / span > < span class = "n" > last_line< / span > < span class = "p" > ,< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > end_colno< / span > < span class = "p" > )< / span >
< span class = "n" > all_lines< / span > < span class = "o" > =< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > _dedented_lines< / span > < span class = "o" > .< / span > < span class = "n" > splitlines< / span > < span class = "p" > ()[< / span >
< span class = "p" > :< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > end_lineno< / span > < span class = "o" > -< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "p" > ]< / span >
< span class = "c1" > # adjust start/end offset based on dedent< / span >
< span class = "n" > dedent_characters< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > first_line< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ])< / span >
< span class = "n" > start_offset< / span > < span class = "o" > =< / span > < span class = "nb" > max< / span > < span class = "p" > (< / span > < span class = "mi" > 0< / span > < span class = "p" > ,< / span > < span class = "n" > start_offset< / span > < span class = "o" > -< / span > < span class = "n" > dedent_characters< / span > < span class = "p" > )< / span >
< span class = "n" > end_offset< / span > < span class = "o" > =< / span > < span class = "nb" > max< / span > < span class = "p" > (< / span > < span class = "mi" > 0< / span > < span class = "p" > ,< / span > < span class = "n" > end_offset< / span > < span class = "o" > -< / span > < span class = "n" > dedent_characters< / span > < span class = "p" > )< / span >
< span class = "c1" > # When showing this on a terminal, some of the non-ASCII characters< / span >
< span class = "c1" > # might be rendered as double-width characters, so we need to take< / span >
< span class = "c1" > # that into account when calculating the length of the line.< / span >
< span class = "n" > dp_start_offset< / span > < span class = "o" > =< / span > < span class = "n" > _display_width< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ],< / span > < span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "n" > start_offset< / span > < span class = "p" > )< / span >
< span class = "n" > dp_end_offset< / span > < span class = "o" > =< / span > < span class = "n" > _display_width< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ],< / span > < span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "n" > end_offset< / span > < span class = "p" > )< / span >
< span class = "c1" > # get exact code segment corresponding to the instruction< / span >
< span class = "n" > segment< / span > < span class = "o" > =< / span > < span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > )< / span >
< span class = "n" > segment< / span > < span class = "o" > =< / span > < span class = "n" > segment< / span > < span class = "p" > [< / span > < span class = "n" > start_offset< / span > < span class = "p" > :< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > segment< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "p" > (< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ])< / span > < span class = "o" > -< / span > < span class = "n" > end_offset< / span > < span class = "p" > )]< / span >
< span class = "c1" > # attempt to parse for anchors< / span >
< span class = "n" > anchors< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "n" > show_carets< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span >
< span class = "k" > with< / span > < span class = "n" > suppress< / span > < span class = "p" > (< / span > < span class = "ne" > Exception< / span > < span class = "p" > ):< / span >
< span class = "n" > anchors< / span > < span class = "o" > =< / span > < span class = "n" > _extract_caret_anchors_from_line_segment< / span > < span class = "p" > (< / span > < span class = "n" > segment< / span > < span class = "p" > )< / span >
< span class = "n" > show_carets< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _should_show_carets< / span > < span class = "p" > (< / span > < span class = "n" > start_offset< / span > < span class = "p" > ,< / span > < span class = "n" > end_offset< / span > < span class = "p" > ,< / span > < span class = "n" > all_lines< / span > < span class = "p" > ,< / span > < span class = "n" > anchors< / span > < span class = "p" > )< / span >
< span class = "n" > result< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "c1" > # only display first line, last line, and lines around anchor start/end< / span >
< span class = "n" > significant_lines< / span > < span class = "o" > =< / span > < span class = "p" > {< / span > < span class = "mi" > 0< / span > < span class = "p" > ,< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > }< / span >
< span class = "n" > anchors_left_end_offset< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "n" > anchors_right_start_offset< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "n" > primary_char< / span > < span class = "o" > =< / span > < span class = "s2" > " ^" < / span >
< span class = "n" > secondary_char< / span > < span class = "o" > =< / span > < span class = "s2" > " ^" < / span >
< span class = "k" > if< / span > < span class = "n" > anchors< / span > < span class = "p" > :< / span >
< span class = "n" > anchors_left_end_offset< / span > < span class = "o" > =< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > left_end_offset< / span >
< span class = "n" > anchors_right_start_offset< / span > < span class = "o" > =< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > right_start_offset< / span >
< span class = "c1" > # computed anchor positions do not take start_offset into account,< / span >
< span class = "c1" > # so account for it here< / span >
< span class = "k" > if< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > left_end_lineno< / span > < span class = "o" > ==< / span > < span class = "mi" > 0< / span > < span class = "p" > :< / span >
< span class = "n" > anchors_left_end_offset< / span > < span class = "o" > +=< / span > < span class = "n" > start_offset< / span >
< span class = "k" > if< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > right_start_lineno< / span > < span class = "o" > ==< / span > < span class = "mi" > 0< / span > < span class = "p" > :< / span >
< span class = "n" > anchors_right_start_offset< / span > < span class = "o" > +=< / span > < span class = "n" > start_offset< / span >
< span class = "c1" > # account for display width< / span >
< span class = "n" > anchors_left_end_offset< / span > < span class = "o" > =< / span > < span class = "n" > _display_width< / span > < span class = "p" > (< / span >
< span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > left_end_lineno< / span > < span class = "p" > ],< / span > < span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "n" > anchors_left_end_offset< / span >
< span class = "p" > )< / span >
< span class = "n" > anchors_right_start_offset< / span > < span class = "o" > =< / span > < span class = "n" > _display_width< / span > < span class = "p" > (< / span >
< span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > right_start_lineno< / span > < span class = "p" > ],< / span > < span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "n" > anchors_right_start_offset< / span >
< span class = "p" > )< / span >
< span class = "n" > primary_char< / span > < span class = "o" > =< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > primary_char< / span >
< span class = "n" > secondary_char< / span > < span class = "o" > =< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > secondary_char< / span >
< span class = "n" > significant_lines< / span > < span class = "o" > .< / span > < span class = "n" > update< / span > < span class = "p" > (< / span >
< span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > left_end_lineno< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ,< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > left_end_lineno< / span > < span class = "o" > +< / span > < span class = "mi" > 2< / span > < span class = "p" > )< / span >
< span class = "p" > )< / span >
< span class = "n" > significant_lines< / span > < span class = "o" > .< / span > < span class = "n" > update< / span > < span class = "p" > (< / span >
< span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > right_start_lineno< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ,< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > right_start_lineno< / span > < span class = "o" > +< / span > < span class = "mi" > 2< / span > < span class = "p" > )< / span >
< span class = "p" > )< / span >
< span class = "c1" > # remove bad line numbers< / span >
< span class = "n" > significant_lines< / span > < span class = "o" > .< / span > < span class = "n" > discard< / span > < span class = "p" > (< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span >
< span class = "n" > significant_lines< / span > < span class = "o" > .< / span > < span class = "n" > discard< / span > < span class = "p" > (< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > ))< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > output_line< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " output all_lines[lineno] along with carets" " " < / span >
< span class = "n" > result< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "n" > lineno< / span > < span class = "p" > ]< / span > < span class = "o" > +< / span > < span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > show_carets< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span >
< span class = "n" > num_spaces< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "n" > lineno< / span > < span class = "p" > ])< / span > < span class = "o" > -< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "n" > lineno< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > lstrip< / span > < span class = "p" > ())< / span >
< span class = "n" > carets< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > num_carets< / span > < span class = "o" > =< / span > < span class = "n" > dp_end_offset< / span > < span class = "k" > if< / span > < span class = "n" > lineno< / span > < span class = "o" > ==< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "k" > else< / span > < span class = "n" > _display_width< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "n" > lineno< / span > < span class = "p" > ])< / span >
< span class = "c1" > # compute caret character for each position< / span >
< span class = "k" > for< / span > < span class = "n" > col< / span > < span class = "ow" > in< / span > < span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "n" > num_carets< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > col< / span > < span class = "o" > < < / span > < span class = "n" > num_spaces< / span > < span class = "ow" > or< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "o" > ==< / span > < span class = "mi" > 0< / span > < span class = "ow" > and< / span > < span class = "n" > col< / span > < span class = "o" > < < / span > < span class = "n" > dp_start_offset< / span > < span class = "p" > ):< / span >
< span class = "c1" > # before first non-ws char of the line, or before start of instruction< / span >
< span class = "n" > carets< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "s1" > ' ' < / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "n" > anchors< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span >
< span class = "n" > lineno< / span > < span class = "o" > > < / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > left_end_lineno< / span > < span class = "ow" > or< / span >
< span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "o" > ==< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > left_end_lineno< / span > < span class = "ow" > and< / span > < span class = "n" > col< / span > < span class = "o" > > =< / span > < span class = "n" > anchors_left_end_offset< / span > < span class = "p" > )< / span >
< span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span >
< span class = "n" > lineno< / span > < span class = "o" > < < / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > right_start_lineno< / span > < span class = "ow" > or< / span >
< span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "o" > ==< / span > < span class = "n" > anchors< / span > < span class = "o" > .< / span > < span class = "n" > right_start_lineno< / span > < span class = "ow" > and< / span > < span class = "n" > col< / span > < span class = "o" > < < / span > < span class = "n" > anchors_right_start_offset< / span > < span class = "p" > )< / span >
< span class = "p" > ):< / span >
< span class = "c1" > # within anchors< / span >
< span class = "n" > carets< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > secondary_char< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > carets< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > primary_char< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > colorize< / span > < span class = "p" > :< / span >
< span class = "c1" > # Replace the previous line with a red version of it only in the parts covered< / span >
< span class = "c1" > # by the carets.< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > result< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span >
< span class = "n" > colorized_line_parts< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > colorized_carets_parts< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "k" > for< / span > < span class = "n" > color< / span > < span class = "p" > ,< / span > < span class = "n" > group< / span > < span class = "ow" > in< / span > < span class = "n" > itertools< / span > < span class = "o" > .< / span > < span class = "n" > groupby< / span > < span class = "p" > (< / span > < span class = "n" > itertools< / span > < span class = "o" > .< / span > < span class = "n" > zip_longest< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > ,< / span > < span class = "n" > carets< / span > < span class = "p" > ,< / span > < span class = "n" > fillvalue< / span > < span class = "o" > =< / span > < span class = "s2" > " " < / span > < span class = "p" > ),< / span > < span class = "n" > key< / span > < span class = "o" > =< / span > < span class = "k" > lambda< / span > < span class = "n" > x< / span > < span class = "p" > :< / span > < span class = "n" > x< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ]):< / span >
< span class = "n" > caret_group< / span > < span class = "o" > =< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > group< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > color< / span > < span class = "o" > ==< / span > < span class = "s2" > " ^" < / span > < span class = "p" > :< / span >
< span class = "n" > colorized_line_parts< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > BOLD_RED< / span > < span class = "o" > +< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > char< / span > < span class = "k" > for< / span > < span class = "n" > char< / span > < span class = "p" > ,< / span > < span class = "n" > _< / span > < span class = "ow" > in< / span > < span class = "n" > caret_group< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > )< / span >
< span class = "n" > colorized_carets_parts< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > BOLD_RED< / span > < span class = "o" > +< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > caret< / span > < span class = "k" > for< / span > < span class = "n" > _< / span > < span class = "p" > ,< / span > < span class = "n" > caret< / span > < span class = "ow" > in< / span > < span class = "n" > caret_group< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "n" > color< / span > < span class = "o" > ==< / span > < span class = "s2" > " ~" < / span > < span class = "p" > :< / span >
< span class = "n" > colorized_line_parts< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RED< / span > < span class = "o" > +< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > char< / span > < span class = "k" > for< / span > < span class = "n" > char< / span > < span class = "p" > ,< / span > < span class = "n" > _< / span > < span class = "ow" > in< / span > < span class = "n" > caret_group< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > )< / span >
< span class = "n" > colorized_carets_parts< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RED< / span > < span class = "o" > +< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > caret< / span > < span class = "k" > for< / span > < span class = "n" > _< / span > < span class = "p" > ,< / span > < span class = "n" > caret< / span > < span class = "ow" > in< / span > < span class = "n" > caret_group< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > colorized_line_parts< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > char< / span > < span class = "k" > for< / span > < span class = "n" > char< / span > < span class = "p" > ,< / span > < span class = "n" > _< / span > < span class = "ow" > in< / span > < span class = "n" > caret_group< / span > < span class = "p" > ))< / span >
< span class = "n" > colorized_carets_parts< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > caret< / span > < span class = "k" > for< / span > < span class = "n" > _< / span > < span class = "p" > ,< / span > < span class = "n" > caret< / span > < span class = "ow" > in< / span > < span class = "n" > caret_group< / span > < span class = "p" > ))< / span >
< span class = "n" > colorized_line< / span > < span class = "o" > =< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > colorized_line_parts< / span > < span class = "p" > )< / span >
< span class = "n" > colorized_carets< / span > < span class = "o" > =< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > colorized_carets_parts< / span > < span class = "p" > )< / span >
< span class = "n" > result< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > colorized_line< / span >
< span class = "n" > result< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > colorized_carets< / span > < span class = "o" > +< / span > < span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > result< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > carets< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "s2" > " < / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "p" > )< / span >
< span class = "c1" > # display significant lines< / span >
< span class = "n" > sig_lines_list< / span > < span class = "o" > =< / span > < span class = "nb" > sorted< / span > < span class = "p" > (< / span > < span class = "n" > significant_lines< / span > < span class = "p" > )< / span >
< span class = "k" > for< / span > < span class = "n" > i< / span > < span class = "p" > ,< / span > < span class = "n" > lineno< / span > < span class = "ow" > in< / span > < span class = "nb" > enumerate< / span > < span class = "p" > (< / span > < span class = "n" > sig_lines_list< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > i< / span > < span class = "p" > :< / span >
< span class = "n" > linediff< / span > < span class = "o" > =< / span > < span class = "n" > lineno< / span > < span class = "o" > -< / span > < span class = "n" > sig_lines_list< / span > < span class = "p" > [< / span > < span class = "n" > i< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "n" > linediff< / span > < span class = "o" > ==< / span > < span class = "mi" > 2< / span > < span class = "p" > :< / span >
< span class = "c1" > # 1 line in between - just output it< / span >
< span class = "n" > output_line< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "n" > linediff< / span > < span class = "o" > > < / span > < span class = "mi" > 2< / span > < span class = "p" > :< / span >
< span class = "c1" > # > 1 line in between - abbreviate< / span >
< span class = "n" > result< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "sa" > f< / span > < span class = "s2" > " ...< < / span > < span class = "si" > {< / span > < span class = "n" > linediff< / span > < span class = "w" > < / span > < span class = "o" > -< / span > < span class = "w" > < / span > < span class = "mi" > 1< / span > < span class = "si" > }< / span > < span class = "s2" > lines> ...< / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "p" > )< / span >
< span class = "n" > output_line< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > )< / span >
< span class = "n" > row< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span >
< span class = "n" > textwrap< / span > < span class = "o" > .< / span > < span class = "n" > indent< / span > < span class = "p" > (< / span > < span class = "n" > textwrap< / span > < span class = "o" > .< / span > < span class = "n" > dedent< / span > < span class = "p" > (< / span > < span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > result< / span > < span class = "p" > )),< / span > < span class = "s1" > ' ' < / span > < span class = "p" > ,< / span > < span class = "k" > lambda< / span > < span class = "n" > line< / span > < span class = "p" > :< / span > < span class = "kc" > True< / span > < span class = "p" > )< / span >
< span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > locals< / span > < span class = "p" > :< / span >
< span class = "k" > for< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "ow" > in< / span > < span class = "nb" > sorted< / span > < span class = "p" > (< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > locals< / span > < span class = "o" > .< / span > < span class = "n" > items< / span > < span class = "p" > ()):< / span >
< span class = "n" > row< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "si" > {name}< / span > < span class = "s1" > = < / span > < span class = "si" > {value}< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > value< / span > < span class = "p" > ))< / span >
< span class = "k" > return< / span > < span class = "s1" > ' ' < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > row< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _should_show_carets< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > start_offset< / span > < span class = "p" > ,< / span > < span class = "n" > end_offset< / span > < span class = "p" > ,< / span > < span class = "n" > all_lines< / span > < span class = "p" > ,< / span > < span class = "n" > anchors< / span > < span class = "p" > ):< / span >
< span class = "k" > with< / span > < span class = "n" > suppress< / span > < span class = "p" > (< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ,< / span > < span class = "ne" > ImportError< / span > < span class = "p" > ):< / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > ast< / span >
< span class = "n" > tree< / span > < span class = "o" > =< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > ))< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > tree< / span > < span class = "o" > .< / span > < span class = "n" > body< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > False< / span >
< span class = "n" > statement< / span > < span class = "o" > =< / span > < span class = "n" > tree< / span > < span class = "o" > .< / span > < span class = "n" > body< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _spawns_full_line< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span >
< span class = "n" > value< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "o" > ==< / span > < span class = "mi" > 1< / span >
< span class = "ow" > and< / span > < span class = "n" > value< / span > < span class = "o" > .< / span > < span class = "n" > end_lineno< / span > < span class = "o" > ==< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > all_lines< / span > < span class = "p" > )< / span >
< span class = "ow" > and< / span > < span class = "n" > value< / span > < span class = "o" > .< / span > < span class = "n" > col_offset< / span > < span class = "o" > ==< / span > < span class = "n" > start_offset< / span >
< span class = "ow" > and< / span > < span class = "n" > value< / span > < span class = "o" > .< / span > < span class = "n" > end_col_offset< / span > < span class = "o" > ==< / span > < span class = "n" > end_offset< / span >
< span class = "p" > )< / span >
< span class = "k" > match< / span > < span class = "n" > statement< / span > < span class = "p" > :< / span >
< span class = "k" > case< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > Return< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > Call< / span > < span class = "p" > ()):< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > statement< / span > < span class = "o" > .< / span > < span class = "n" > value< / span > < span class = "o" > .< / span > < span class = "n" > func< / span > < span class = "p" > ,< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > Name< / span > < span class = "p" > ):< / span >
< span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > statement< / span > < span class = "o" > .< / span > < span class = "n" > value< / span >
< span class = "k" > case< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > Assign< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > Call< / span > < span class = "p" > ()):< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span >
< span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > statement< / span > < span class = "o" > .< / span > < span class = "n" > targets< / span > < span class = "p" > )< / span > < span class = "o" > ==< / span > < span class = "mi" > 1< / span > < span class = "ow" > and< / span >
< span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > statement< / span > < span class = "o" > .< / span > < span class = "n" > targets< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ],< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > Name< / span > < span class = "p" > )< / span >
< span class = "p" > ):< / span >
< span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > statement< / span > < span class = "o" > .< / span > < span class = "n" > value< / span >
< span class = "k" > if< / span > < span class = "n" > value< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span > < span class = "n" > _spawns_full_line< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "kc" > False< / span >
< span class = "k" > if< / span > < span class = "n" > anchors< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > True< / span >
< span class = "k" > if< / span > < span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ][:< / span > < span class = "n" > start_offset< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > lstrip< / span > < span class = "p" > ()< / span > < span class = "ow" > or< / span > < span class = "n" > all_lines< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ][< / span > < span class = "n" > end_offset< / span > < span class = "p" > :]< / span > < span class = "o" > .< / span > < span class = "n" > rstrip< / span > < span class = "p" > ():< / span >
< span class = "k" > return< / span > < span class = "kc" > True< / span >
< span class = "k" > return< / span > < span class = "kc" > False< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > format< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Format the stack ready for printing.< / span >
< span class = "sd" > Returns a list of strings ready for printing. Each string in the< / span >
< span class = "sd" > resulting list corresponds to a single frame from the stack.< / span >
< span class = "sd" > Each string ends in a newline; the strings may contain internal< / span >
< span class = "sd" > newlines as well, for those items with source text lines.< / span >
< span class = "sd" > For long sequences of the same frame and line, the first few< / span >
< span class = "sd" > repetitions are shown, followed by a summary line stating the exact< / span >
< span class = "sd" > number of further repetitions.< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " colorize" < / span > < span class = "p" > ,< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "n" > result< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > last_file< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "n" > last_line< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "n" > last_name< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "n" > count< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "k" > for< / span > < span class = "n" > frame_summary< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "p" > :< / span >
< span class = "n" > formatted_frame< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > format_frame_summary< / span > < span class = "p" > (< / span > < span class = "n" > frame_summary< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > formatted_frame< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > continue< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "n" > last_file< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "ow" > or< / span > < span class = "n" > last_file< / span > < span class = "o" > !=< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "ow" > or< / span >
< span class = "n" > last_line< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "ow" > or< / span > < span class = "n" > last_line< / span > < span class = "o" > !=< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "ow" > or< / span >
< span class = "n" > last_name< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "ow" > or< / span > < span class = "n" > last_name< / span > < span class = "o" > !=< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > count< / span > < span class = "o" > > < / span > < span class = "n" > _RECURSIVE_CUTOFF< / span > < span class = "p" > :< / span >
< span class = "n" > count< / span > < span class = "o" > -=< / span > < span class = "n" > _RECURSIVE_CUTOFF< / span >
< span class = "n" > result< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span >
< span class = "sa" > f< / span > < span class = "s1" > ' [Previous line repeated < / span > < span class = "si" > {< / span > < span class = "n" > count< / span > < span class = "si" > }< / span > < span class = "s1" > more ' < / span >
< span class = "sa" > f< / span > < span class = "s1" > ' time< / span > < span class = "si" > {< / span > < span class = "s2" > " s" < / span > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > count< / span > < span class = "w" > < / span > < span class = "o" > > < / span > < span class = "w" > < / span > < span class = "mi" > 1< / span > < span class = "w" > < / span > < span class = "k" > else< / span > < span class = "w" > < / span > < span class = "s2" > " " < / span > < span class = "si" > }< / span > < span class = "s1" > ]< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span >
< span class = "p" > )< / span >
< span class = "n" > last_file< / span > < span class = "o" > =< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span >
< span class = "n" > last_line< / span > < span class = "o" > =< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span >
< span class = "n" > last_name< / span > < span class = "o" > =< / span > < span class = "n" > frame_summary< / span > < span class = "o" > .< / span > < span class = "n" > name< / span >
< span class = "n" > count< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "n" > count< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "k" > if< / span > < span class = "n" > count< / span > < span class = "o" > > < / span > < span class = "n" > _RECURSIVE_CUTOFF< / span > < span class = "p" > :< / span >
< span class = "k" > continue< / span >
< span class = "n" > result< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > formatted_frame< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > count< / span > < span class = "o" > > < / span > < span class = "n" > _RECURSIVE_CUTOFF< / span > < span class = "p" > :< / span >
< span class = "n" > count< / span > < span class = "o" > -=< / span > < span class = "n" > _RECURSIVE_CUTOFF< / span >
< span class = "n" > result< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span >
< span class = "sa" > f< / span > < span class = "s1" > ' [Previous line repeated < / span > < span class = "si" > {< / span > < span class = "n" > count< / span > < span class = "si" > }< / span > < span class = "s1" > more ' < / span >
< span class = "sa" > f< / span > < span class = "s1" > ' time< / span > < span class = "si" > {< / span > < span class = "s2" > " s" < / span > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > count< / span > < span class = "w" > < / span > < span class = "o" > > < / span > < span class = "w" > < / span > < span class = "mi" > 1< / span > < span class = "w" > < / span > < span class = "k" > else< / span > < span class = "w" > < / span > < span class = "s2" > " " < / span > < span class = "si" > }< / span > < span class = "s1" > ]< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span >
< span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > result< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _byte_offset_to_character_offset< / span > < span class = "p" > (< / span > < span class = "nb" > str< / span > < span class = "p" > ,< / span > < span class = "n" > offset< / span > < span class = "p" > ):< / span >
< span class = "n" > as_utf8< / span > < span class = "o" > =< / span > < span class = "nb" > str< / span > < span class = "o" > .< / span > < span class = "n" > encode< / span > < span class = "p" > (< / span > < span class = "s1" > ' utf-8' < / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > as_utf8< / span > < span class = "p" > [:< / span > < span class = "n" > offset< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "s2" > " utf-8" < / span > < span class = "p" > ,< / span > < span class = "n" > errors< / span > < span class = "o" > =< / span > < span class = "s2" > " replace" < / span > < span class = "p" > ))< / span >
< span class = "n" > _Anchors< / span > < span class = "o" > =< / span > < span class = "n" > collections< / span > < span class = "o" > .< / span > < span class = "n" > namedtuple< / span > < span class = "p" > (< / span >
< span class = "s2" > " _Anchors" < / span > < span class = "p" > ,< / span >
< span class = "p" > [< / span >
< span class = "s2" > " left_end_lineno" < / span > < span class = "p" > ,< / span >
< span class = "s2" > " left_end_offset" < / span > < span class = "p" > ,< / span >
< span class = "s2" > " right_start_lineno" < / span > < span class = "p" > ,< / span >
< span class = "s2" > " right_start_offset" < / span > < span class = "p" > ,< / span >
< span class = "s2" > " primary_char" < / span > < span class = "p" > ,< / span >
< span class = "s2" > " secondary_char" < / span > < span class = "p" > ,< / span >
< span class = "p" > ],< / span >
< span class = "n" > defaults< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "s2" > " ~" < / span > < span class = "p" > ,< / span > < span class = "s2" > " ^" < / span > < span class = "p" > ]< / span >
< span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _extract_caret_anchors_from_line_segment< / span > < span class = "p" > (< / span > < span class = "n" > segment< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " < / span >
< span class = "sd" > Given source code `segment` corresponding to a FrameSummary, determine:< / span >
< span class = "sd" > - for binary ops, the location of the binary op< / span >
< span class = "sd" > - for indexing and function calls, the location of the brackets.< / span >
< span class = "sd" > `segment` is expected to be a valid Python expression.< / span >
< span class = "sd" > " " " < / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > ast< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "c1" > # Without parentheses, `segment` is parsed as a statement.< / span >
< span class = "c1" > # Binary ops, subscripts, and calls are expressions, so< / span >
< span class = "c1" > # we can wrap them with parentheses to parse them as< / span >
< span class = "c1" > # (possibly multi-line) expressions.< / span >
< span class = "c1" > # e.g. if we try to highlight the addition in< / span >
< span class = "c1" > # x = (< / span >
< span class = "c1" > # a +< / span >
< span class = "c1" > # b< / span >
< span class = "c1" > # )< / span >
< span class = "c1" > # then we would ast.parse< / span >
< span class = "c1" > # a +< / span >
< span class = "c1" > # b< / span >
< span class = "c1" > # which is not a valid statement because of the newline.< / span >
< span class = "c1" > # Adding brackets makes it a valid expression.< / span >
< span class = "c1" > # (< / span >
< span class = "c1" > # a +< / span >
< span class = "c1" > # b< / span >
< span class = "c1" > # )< / span >
< span class = "c1" > # Line locations will be different than the original,< / span >
< span class = "c1" > # which is taken into account later on.< / span >
< span class = "n" > tree< / span > < span class = "o" > =< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "sa" > f< / span > < span class = "s2" > " (< / span > < span class = "se" > \n< / span > < span class = "si" > {< / span > < span class = "n" > segment< / span > < span class = "si" > }< / span > < span class = "se" > \n< / span > < span class = "s2" > )" < / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "k" > if< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > tree< / span > < span class = "o" > .< / span > < span class = "n" > body< / span > < span class = "p" > )< / span > < span class = "o" > !=< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "n" > lines< / span > < span class = "o" > =< / span > < span class = "n" > segment< / span > < span class = "o" > .< / span > < span class = "n" > splitlines< / span > < span class = "p" > ()< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > normalize< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > offset< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Get character index given byte offset" " " < / span >
< span class = "k" > return< / span > < span class = "n" > _byte_offset_to_character_offset< / span > < span class = "p" > (< / span > < span class = "n" > lines< / span > < span class = "p" > [< / span > < span class = "n" > lineno< / span > < span class = "p" > ],< / span > < span class = "n" > offset< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > next_valid_char< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Gets the next valid character index in `lines`, if< / span >
< span class = "sd" > the current location is not valid. Handles empty lines.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > while< / span > < span class = "n" > lineno< / span > < span class = "o" > < < / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > lines< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "n" > col< / span > < span class = "o" > > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > lines< / span > < span class = "p" > [< / span > < span class = "n" > lineno< / span > < span class = "p" > ]):< / span >
< span class = "n" > col< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "n" > lineno< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "k" > assert< / span > < span class = "n" > lineno< / span > < span class = "o" > < < / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > lines< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "n" > col< / span > < span class = "o" > < < / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > lines< / span > < span class = "p" > [< / span > < span class = "n" > lineno< / span > < span class = "p" > ])< / span >
< span class = "k" > return< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > increment< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Get the next valid character index in `lines`." " " < / span >
< span class = "n" > col< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "o" > =< / span > < span class = "n" > next_valid_char< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > nextline< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Get the next valid character at least on the next line" " " < / span >
< span class = "n" > col< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "n" > lineno< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "o" > =< / span > < span class = "n" > next_valid_char< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > increment_until< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > ,< / span > < span class = "n" > stop< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Get the next valid non-" \\#" character that satisfies the `stop` predicate" " " < / span >
< span class = "k" > while< / span > < span class = "kc" > True< / span > < span class = "p" > :< / span >
< span class = "n" > ch< / span > < span class = "o" > =< / span > < span class = "n" > lines< / span > < span class = "p" > [< / span > < span class = "n" > lineno< / span > < span class = "p" > ][< / span > < span class = "n" > col< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "n" > ch< / span > < span class = "ow" > in< / span > < span class = "s2" > " < / span > < span class = "se" > \\< / span > < span class = "s2" > #" < / span > < span class = "p" > :< / span >
< span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "o" > =< / span > < span class = "n" > nextline< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "ow" > not< / span > < span class = "n" > stop< / span > < span class = "p" > (< / span > < span class = "n" > ch< / span > < span class = "p" > ):< / span >
< span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "o" > =< / span > < span class = "n" > increment< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > break< / span >
< span class = "k" > return< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > setup_positions< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "p" > ,< / span > < span class = "n" > force_valid< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Get the lineno/col position of the end of `expr`. If `force_valid` is True,< / span >
< span class = "sd" > forces the position to be a valid character (e.g. if the position is beyond the< / span >
< span class = "sd" > end of the line, move to the next line)< / span >
< span class = "sd" > " " " < / span >
< span class = "c1" > # -2 since end_lineno is 1-indexed and because we added an extra< / span >
< span class = "c1" > # bracket + newline to `segment` when calling ast.parse< / span >
< span class = "n" > lineno< / span > < span class = "o" > =< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > end_lineno< / span > < span class = "o" > -< / span > < span class = "mi" > 2< / span >
< span class = "n" > col< / span > < span class = "o" > =< / span > < span class = "n" > normalize< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > end_col_offset< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > next_valid_char< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > )< / span > < span class = "k" > if< / span > < span class = "n" > force_valid< / span > < span class = "k" > else< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > )< / span >
< span class = "n" > statement< / span > < span class = "o" > =< / span > < span class = "n" > tree< / span > < span class = "o" > .< / span > < span class = "n" > body< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< span class = "k" > match< / span > < span class = "n" > statement< / span > < span class = "p" > :< / span >
< span class = "k" > case< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > Expr< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "p" > ):< / span >
< span class = "k" > match< / span > < span class = "n" > expr< / span > < span class = "p" > :< / span >
< span class = "k" > case< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > BinOp< / span > < span class = "p" > ():< / span >
< span class = "c1" > # ast gives these locations for BinOp subexpressions< / span >
< span class = "c1" > # ( left_expr ) + ( right_expr )< / span >
< span class = "c1" > # left^^^^^ right^^^^^< / span >
< span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "o" > =< / span > < span class = "n" > setup_positions< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > left< / span > < span class = "p" > )< / span >
< span class = "c1" > # First operator character is the first non-space/' )' character< / span >
< span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "o" > =< / span > < span class = "n" > increment_until< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > ,< / span > < span class = "k" > lambda< / span > < span class = "n" > x< / span > < span class = "p" > :< / span > < span class = "ow" > not< / span > < span class = "n" > x< / span > < span class = "o" > .< / span > < span class = "n" > isspace< / span > < span class = "p" > ()< / span > < span class = "ow" > and< / span > < span class = "n" > x< / span > < span class = "o" > !=< / span > < span class = "s1" > ' )' < / span > < span class = "p" > )< / span >
< span class = "c1" > # binary op is 1 or 2 characters long, on the same line,< / span >
< span class = "c1" > # before the right subexpression< / span >
< span class = "n" > right_col< / span > < span class = "o" > =< / span > < span class = "n" > col< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span >
< span class = "n" > right_col< / span > < span class = "o" > < < / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > lines< / span > < span class = "p" > [< / span > < span class = "n" > lineno< / span > < span class = "p" > ])< / span >
< span class = "ow" > and< / span > < span class = "p" > (< / span >
< span class = "c1" > # operator char should not be in the right subexpression< / span >
< span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > right< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "o" > -< / span > < span class = "mi" > 2< / span > < span class = "o" > > < / span > < span class = "n" > lineno< / span > < span class = "ow" > or< / span >
< span class = "n" > right_col< / span > < span class = "o" > < < / span > < span class = "n" > normalize< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > right< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "o" > -< / span > < span class = "mi" > 2< / span > < span class = "p" > ,< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > right< / span > < span class = "o" > .< / span > < span class = "n" > col_offset< / span > < span class = "p" > )< / span >
< span class = "p" > )< / span >
< span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "p" > (< / span > < span class = "n" > ch< / span > < span class = "o" > :=< / span > < span class = "n" > lines< / span > < span class = "p" > [< / span > < span class = "n" > lineno< / span > < span class = "p" > ][< / span > < span class = "n" > right_col< / span > < span class = "p" > ])< / span > < span class = "o" > .< / span > < span class = "n" > isspace< / span > < span class = "p" > ()< / span >
< span class = "ow" > and< / span > < span class = "n" > ch< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "s2" > " < / span > < span class = "se" > \\< / span > < span class = "s2" > #" < / span >
< span class = "p" > ):< / span >
< span class = "n" > right_col< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "c1" > # right_col can be invalid since it is exclusive< / span >
< span class = "k" > return< / span > < span class = "n" > _Anchors< / span > < span class = "p" > (< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > col< / span > < span class = "p" > ,< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span > < span class = "n" > right_col< / span > < span class = "p" > )< / span >
< span class = "k" > case< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > Subscript< / span > < span class = "p" > ():< / span >
< span class = "c1" > # ast gives these locations for value and slice subexpressions< / span >
< span class = "c1" > # ( value_expr ) [ slice_expr ]< / span >
< span class = "c1" > # value^^^^^ slice^^^^^< / span >
< span class = "c1" > # subscript^^^^^^^^^^^^^^^^^^^^< / span >
< span class = "c1" > # find left bracket< / span >
< span class = "n" > left_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > left_col< / span > < span class = "o" > =< / span > < span class = "n" > setup_positions< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "n" > left_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > left_col< / span > < span class = "o" > =< / span > < span class = "n" > increment_until< / span > < span class = "p" > (< / span > < span class = "n" > left_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > left_col< / span > < span class = "p" > ,< / span > < span class = "k" > lambda< / span > < span class = "n" > x< / span > < span class = "p" > :< / span > < span class = "n" > x< / span > < span class = "o" > ==< / span > < span class = "s1" > ' [' < / span > < span class = "p" > )< / span >
< span class = "c1" > # find right bracket (final character of expression)< / span >
< span class = "n" > right_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > right_col< / span > < span class = "o" > =< / span > < span class = "n" > setup_positions< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "p" > ,< / span > < span class = "n" > force_valid< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > _Anchors< / span > < span class = "p" > (< / span > < span class = "n" > left_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > left_col< / span > < span class = "p" > ,< / span > < span class = "n" > right_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > right_col< / span > < span class = "p" > )< / span >
< span class = "k" > case< / span > < span class = "n" > ast< / span > < span class = "o" > .< / span > < span class = "n" > Call< / span > < span class = "p" > ():< / span >
< span class = "c1" > # ast gives these locations for function call expressions< / span >
< span class = "c1" > # ( func_expr ) (args, kwargs)< / span >
< span class = "c1" > # func^^^^^< / span >
< span class = "c1" > # call^^^^^^^^^^^^^^^^^^^^^^^^< / span >
< span class = "c1" > # find left bracket< / span >
< span class = "n" > left_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > left_col< / span > < span class = "o" > =< / span > < span class = "n" > setup_positions< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "o" > .< / span > < span class = "n" > func< / span > < span class = "p" > )< / span >
< span class = "n" > left_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > left_col< / span > < span class = "o" > =< / span > < span class = "n" > increment_until< / span > < span class = "p" > (< / span > < span class = "n" > left_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > left_col< / span > < span class = "p" > ,< / span > < span class = "k" > lambda< / span > < span class = "n" > x< / span > < span class = "p" > :< / span > < span class = "n" > x< / span > < span class = "o" > ==< / span > < span class = "s1" > ' (' < / span > < span class = "p" > )< / span >
< span class = "c1" > # find right bracket (final character of expression)< / span >
< span class = "n" > right_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > right_col< / span > < span class = "o" > =< / span > < span class = "n" > setup_positions< / span > < span class = "p" > (< / span > < span class = "n" > expr< / span > < span class = "p" > ,< / span > < span class = "n" > force_valid< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > _Anchors< / span > < span class = "p" > (< / span > < span class = "n" > left_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > left_col< / span > < span class = "p" > ,< / span > < span class = "n" > right_lineno< / span > < span class = "p" > ,< / span > < span class = "n" > right_col< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "n" > _WIDE_CHAR_SPECIFIERS< / span > < span class = "o" > =< / span > < span class = "s2" > " WF" < / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _display_width< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > ,< / span > < span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Calculate the extra amount of width space the given source< / span >
< span class = "sd" > code segment might take if it were to be displayed on a fixed< / span >
< span class = "sd" > width output device. Supports wide unicode characters and emojis." " " < / span >
< span class = "k" > if< / span > < span class = "n" > offset< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "c1" > # Fast track for ASCII-only strings< / span >
< span class = "k" > if< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > isascii< / span > < span class = "p" > ():< / span >
< span class = "k" > return< / span > < span class = "n" > offset< / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > unicodedata< / span >
< span class = "k" > return< / span > < span class = "nb" > sum< / span > < span class = "p" > (< / span >
< span class = "mi" > 2< / span > < span class = "k" > if< / span > < span class = "n" > unicodedata< / span > < span class = "o" > .< / span > < span class = "n" > east_asian_width< / span > < span class = "p" > (< / span > < span class = "n" > char< / span > < span class = "p" > )< / span > < span class = "ow" > in< / span > < span class = "n" > _WIDE_CHAR_SPECIFIERS< / span > < span class = "k" > else< / span > < span class = "mi" > 1< / span >
< span class = "k" > for< / span > < span class = "n" > char< / span > < span class = "ow" > in< / span > < span class = "n" > line< / span > < span class = "p" > [:< / span > < span class = "n" > offset< / span > < span class = "p" > ]< / span >
< span class = "p" > )< / span >
< span class = "k" > class< / span > < span class = "w" > < / span > < span class = "nc" > _ExceptionPrintContext< / span > < span class = "p" > :< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > seen< / span > < span class = "o" > =< / span > < span class = "nb" > set< / span > < span class = "p" > ()< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exception_group_depth< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > need_close< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > indent< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "s1" > ' ' < / span > < span class = "o" > *< / span > < span class = "p" > (< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exception_group_depth< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > emit< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > text_gen< / span > < span class = "p" > ,< / span > < span class = "n" > margin_char< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > margin_char< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > margin_char< / span > < span class = "o" > =< / span > < span class = "s1" > ' |' < / span >
< span class = "n" > indent_str< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exception_group_depth< / span > < span class = "p" > :< / span >
< span class = "n" > indent_str< / span > < span class = "o" > +=< / span > < span class = "n" > margin_char< / span > < span class = "o" > +< / span > < span class = "s1" > ' ' < / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > text_gen< / span > < span class = "p" > ,< / span > < span class = "nb" > str< / span > < span class = "p" > ):< / span >
< span class = "k" > yield< / span > < span class = "n" > textwrap< / span > < span class = "o" > .< / span > < span class = "n" > indent< / span > < span class = "p" > (< / span > < span class = "n" > text_gen< / span > < span class = "p" > ,< / span > < span class = "n" > indent_str< / span > < span class = "p" > ,< / span > < span class = "k" > lambda< / span > < span class = "n" > line< / span > < span class = "p" > :< / span > < span class = "kc" > True< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > for< / span > < span class = "n" > text< / span > < span class = "ow" > in< / span > < span class = "n" > text_gen< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "n" > textwrap< / span > < span class = "o" > .< / span > < span class = "n" > indent< / span > < span class = "p" > (< / span > < span class = "n" > text< / span > < span class = "p" > ,< / span > < span class = "n" > indent_str< / span > < span class = "p" > ,< / span > < span class = "k" > lambda< / span > < span class = "n" > line< / span > < span class = "p" > :< / span > < span class = "kc" > True< / span > < span class = "p" > )< / span >
< span class = "k" > class< / span > < span class = "w" > < / span > < span class = "nc" > TracebackException< / span > < span class = "p" > :< / span >
< span class = "w" > < / span > < span class = "sd" > " " " An exception ready for rendering.< / span >
< span class = "sd" > The traceback module captures enough attributes from the original exception< / span >
< span class = "sd" > to this intermediary form to ensure that no references are held, while< / span >
< span class = "sd" > still being able to fully print or format it.< / span >
< span class = "sd" > max_group_width and max_group_depth control the formatting of exception< / span >
< span class = "sd" > groups. The depth refers to the nesting level of the group, and the width< / span >
< span class = "sd" > refers to the size of a single exception group' s exceptions array. The< / span >
< span class = "sd" > formatted output is truncated when either limit is exceeded.< / span >
< span class = "sd" > Use `from_exception` to create TracebackException instances from exception< / span >
< span class = "sd" > objects, or the constructor to create TracebackException instances from< / span >
< span class = "sd" > individual components.< / span >
< span class = "sd" > - :attr:`__cause__` A TracebackException of the original *__cause__*.< / span >
< span class = "sd" > - :attr:`__context__` A TracebackException of the original *__context__*.< / span >
< span class = "sd" > - :attr:`exceptions` For exception groups - a list of TracebackException< / span >
< span class = "sd" > instances for the nested *exceptions*. ``None`` for other exceptions.< / span >
< span class = "sd" > - :attr:`__suppress_context__` The *__suppress_context__* value from the< / span >
< span class = "sd" > original exception.< / span >
< span class = "sd" > - :attr:`stack` A `StackSummary` representing the traceback.< / span >
< span class = "sd" > - :attr:`exc_type` (deprecated) The class of the original traceback.< / span >
< span class = "sd" > - :attr:`exc_type_str` String display of exc_type< / span >
< span class = "sd" > - :attr:`filename` For syntax errors - the filename where the error< / span >
< span class = "sd" > occurred.< / span >
< span class = "sd" > - :attr:`lineno` For syntax errors - the linenumber where the error< / span >
< span class = "sd" > occurred.< / span >
< span class = "sd" > - :attr:`end_lineno` For syntax errors - the end linenumber where the error< / span >
< span class = "sd" > occurred. Can be `None` if not present.< / span >
< span class = "sd" > - :attr:`text` For syntax errors - the text where the error< / span >
< span class = "sd" > occurred.< / span >
< span class = "sd" > - :attr:`offset` For syntax errors - the offset into the text where the< / span >
< span class = "sd" > error occurred.< / span >
< span class = "sd" > - :attr:`end_offset` For syntax errors - the end offset into the text where< / span >
< span class = "sd" > the error occurred. Can be `None` if not present.< / span >
< span class = "sd" > - :attr:`msg` For syntax errors - the compiler error message.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > exc_type< / span > < span class = "p" > ,< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "n" > exc_traceback< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "p" > ,< / span > < span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< span class = "n" > lookup_lines< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span > < span class = "n" > capture_locals< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span > < span class = "n" > compact< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span >
< span class = "n" > max_group_width< / span > < span class = "o" > =< / span > < span class = "mi" > 15< / span > < span class = "p" > ,< / span > < span class = "n" > max_group_depth< / span > < span class = "o" > =< / span > < span class = "mi" > 10< / span > < span class = "p" > ,< / span > < span class = "n" > save_exc_type< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span > < span class = "n" > _seen< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ):< / span >
< span class = "c1" > # NB: we need to accept exc_traceback, exc_value, exc_traceback to< / span >
< span class = "c1" > # permit backwards compat with the existing API, otherwise we< / span >
< span class = "c1" > # need stub thunk objects just to glue it together.< / span >
< span class = "c1" > # Handle loops in __cause__ or __context__.< / span >
< span class = "n" > is_recursive_call< / span > < span class = "o" > =< / span > < span class = "n" > _seen< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span >
< span class = "k" > if< / span > < span class = "n" > _seen< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > _seen< / span > < span class = "o" > =< / span > < span class = "nb" > set< / span > < span class = "p" > ()< / span >
< span class = "n" > _seen< / span > < span class = "o" > .< / span > < span class = "n" > add< / span > < span class = "p" > (< / span > < span class = "nb" > id< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ))< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > max_group_width< / span > < span class = "o" > =< / span > < span class = "n" > max_group_width< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > max_group_depth< / span > < span class = "o" > =< / span > < span class = "n" > max_group_depth< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > stack< / span > < span class = "o" > =< / span > < span class = "n" > StackSummary< / span > < span class = "o" > .< / span > < span class = "n" > _extract_from_extended_frame_gen< / span > < span class = "p" > (< / span >
< span class = "n" > _walk_tb_with_full_positions< / span > < span class = "p" > (< / span > < span class = "n" > exc_traceback< / span > < span class = "p" > ),< / span >
< span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span > < span class = "n" > lookup_lines< / span > < span class = "o" > =< / span > < span class = "n" > lookup_lines< / span > < span class = "p" > ,< / span >
< span class = "n" > capture_locals< / span > < span class = "o" > =< / span > < span class = "n" > capture_locals< / span > < span class = "p" > )< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _exc_type< / span > < span class = "o" > =< / span > < span class = "n" > exc_type< / span > < span class = "k" > if< / span > < span class = "n" > save_exc_type< / span > < span class = "k" > else< / span > < span class = "kc" > None< / span >
< span class = "c1" > # Capture now to permit freeing resources: only complication is in the< / span >
< span class = "c1" > # unofficial API _format_final_exc_line< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span > < span class = "o" > =< / span > < span class = "n" > _safe_string< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "s1" > ' exception' < / span > < span class = "p" > )< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __notes__< / span > < span class = "o" > =< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "s1" > ' __notes__' < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > Exception< / span > < span class = "k" > as< / span > < span class = "n" > e< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __notes__< / span > < span class = "o" > =< / span > < span class = "p" > [< / span >
< span class = "sa" > f< / span > < span class = "s1" > ' Ignored error getting __notes__: < / span > < span class = "si" > {< / span > < span class = "n" > _safe_string< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "s1" > ' __notes__' < / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nb" > repr< / span > < span class = "p" > )< / span > < span class = "si" > }< / span > < span class = "s1" > ' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _is_syntax_error< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _have_exc_type< / span > < span class = "o" > =< / span > < span class = "n" > exc_type< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span >
< span class = "k" > if< / span > < span class = "n" > exc_type< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exc_type_qualname< / span > < span class = "o" > =< / span > < span class = "n" > exc_type< / span > < span class = "o" > .< / span > < span class = "vm" > __qualname__< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exc_type_module< / span > < span class = "o" > =< / span > < span class = "n" > exc_type< / span > < span class = "o" > .< / span > < span class = "vm" > __module__< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exc_type_qualname< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exc_type_module< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "k" > if< / span > < span class = "n" > exc_type< / span > < span class = "ow" > and< / span > < span class = "nb" > issubclass< / span > < span class = "p" > (< / span > < span class = "n" > exc_type< / span > < span class = "p" > ,< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ):< / span >
< span class = "c1" > # Handle SyntaxError' s specially< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "o" > =< / span > < span class = "n" > exc_value< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span >
< span class = "n" > lno< / span > < span class = "o" > =< / span > < span class = "n" > exc_value< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "o" > =< / span > < span class = "nb" > str< / span > < span class = "p" > (< / span > < span class = "n" > lno< / span > < span class = "p" > )< / span > < span class = "k" > if< / span > < span class = "n" > lno< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "k" > else< / span > < span class = "kc" > None< / span >
< span class = "n" > end_lno< / span > < span class = "o" > =< / span > < span class = "n" > exc_value< / span > < span class = "o" > .< / span > < span class = "n" > end_lineno< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > end_lineno< / span > < span class = "o" > =< / span > < span class = "nb" > str< / span > < span class = "p" > (< / span > < span class = "n" > end_lno< / span > < span class = "p" > )< / span > < span class = "k" > if< / span > < span class = "n" > end_lno< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "k" > else< / span > < span class = "kc" > None< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > text< / span > < span class = "o" > =< / span > < span class = "n" > exc_value< / span > < span class = "o" > .< / span > < span class = "n" > text< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "n" > exc_value< / span > < span class = "o" > .< / span > < span class = "n" > offset< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > end_offset< / span > < span class = "o" > =< / span > < span class = "n" > exc_value< / span > < span class = "o" > .< / span > < span class = "n" > end_offset< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > msg< / span > < span class = "o" > =< / span > < span class = "n" > exc_value< / span > < span class = "o" > .< / span > < span class = "n" > msg< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _is_syntax_error< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span >
< span class = "k" > elif< / span > < span class = "n" > exc_type< / span > < span class = "ow" > and< / span > < span class = "nb" > issubclass< / span > < span class = "p" > (< / span > < span class = "n" > exc_type< / span > < span class = "p" > ,< / span > < span class = "ne" > ImportError< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > \
< span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "s2" > " name_from" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > wrong_name< / span > < span class = "o" > =< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "s2" > " name_from" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< span class = "n" > suggestion< / span > < span class = "o" > =< / span > < span class = "n" > _compute_suggestion_error< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "n" > exc_traceback< / span > < span class = "p" > ,< / span > < span class = "n" > wrong_name< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > suggestion< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span > < span class = "o" > +=< / span > < span class = "sa" > f< / span > < span class = "s2" > " . Did you mean: ' < / span > < span class = "si" > {< / span > < span class = "n" > suggestion< / span > < span class = "si" > }< / span > < span class = "s2" > ' ?" < / span >
< span class = "k" > elif< / span > < span class = "n" > exc_type< / span > < span class = "ow" > and< / span > < span class = "nb" > issubclass< / span > < span class = "p" > (< / span > < span class = "n" > exc_type< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "ne" > NameError< / span > < span class = "p" > ,< / span > < span class = "ne" > AttributeError< / span > < span class = "p" > ))< / span > < span class = "ow" > and< / span > \
< span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "s2" > " name" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > wrong_name< / span > < span class = "o" > =< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "s2" > " name" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< span class = "n" > suggestion< / span > < span class = "o" > =< / span > < span class = "n" > _compute_suggestion_error< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "n" > exc_traceback< / span > < span class = "p" > ,< / span > < span class = "n" > wrong_name< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > suggestion< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span > < span class = "o" > +=< / span > < span class = "sa" > f< / span > < span class = "s2" > " . Did you mean: ' < / span > < span class = "si" > {< / span > < span class = "n" > suggestion< / span > < span class = "si" > }< / span > < span class = "s2" > ' ?" < / span >
< span class = "k" > if< / span > < span class = "nb" > issubclass< / span > < span class = "p" > (< / span > < span class = "n" > exc_type< / span > < span class = "p" > ,< / span > < span class = "ne" > NameError< / span > < span class = "p" > ):< / span >
< span class = "n" > wrong_name< / span > < span class = "o" > =< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "s2" > " name" < / span > < span class = "p" > ,< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > wrong_name< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span > < span class = "n" > wrong_name< / span > < span class = "ow" > in< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > stdlib_module_names< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > suggestion< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span > < span class = "o" > +=< / span > < span class = "sa" > f< / span > < span class = "s2" > " Or did you forget to import ' < / span > < span class = "si" > {< / span > < span class = "n" > wrong_name< / span > < span class = "si" > }< / span > < span class = "s2" > ' ?" < / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span > < span class = "o" > +=< / span > < span class = "sa" > f< / span > < span class = "s2" > " . Did you forget to import ' < / span > < span class = "si" > {< / span > < span class = "n" > wrong_name< / span > < span class = "si" > }< / span > < span class = "s2" > ' ?" < / span >
< span class = "k" > if< / span > < span class = "n" > lookup_lines< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _load_lines< / span > < span class = "p" > ()< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __suppress_context__< / span > < span class = "o" > =< / span > \
< span class = "n" > exc_value< / span > < span class = "o" > .< / span > < span class = "n" > __suppress_context__< / span > < span class = "k" > if< / span > < span class = "n" > exc_value< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "k" > else< / span > < span class = "kc" > False< / span >
< span class = "c1" > # Convert __cause__ and __context__ to `TracebackExceptions`s, use a< / span >
< span class = "c1" > # queue to avoid recursion (only the top-level call gets _seen == None)< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > is_recursive_call< / span > < span class = "p" > :< / span >
< span class = "n" > queue< / span > < span class = "o" > =< / span > < span class = "p" > [(< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > exc_value< / span > < span class = "p" > )]< / span >
< span class = "k" > while< / span > < span class = "n" > queue< / span > < span class = "p" > :< / span >
< span class = "n" > te< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "o" > =< / span > < span class = "n" > queue< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __cause__< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span >
< span class = "ow" > and< / span > < span class = "nb" > id< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __cause__< / span > < span class = "p" > )< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > _seen< / span > < span class = "p" > ):< / span >
< span class = "n" > cause< / span > < span class = "o" > =< / span > < span class = "n" > TracebackException< / span > < span class = "p" > (< / span >
< span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __cause__< / span > < span class = "p" > ),< / span >
< span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __cause__< / span > < span class = "p" > ,< / span >
< span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __cause__< / span > < span class = "o" > .< / span > < span class = "n" > __traceback__< / span > < span class = "p" > ,< / span >
< span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span >
< span class = "n" > lookup_lines< / span > < span class = "o" > =< / span > < span class = "n" > lookup_lines< / span > < span class = "p" > ,< / span >
< span class = "n" > capture_locals< / span > < span class = "o" > =< / span > < span class = "n" > capture_locals< / span > < span class = "p" > ,< / span >
< span class = "n" > max_group_width< / span > < span class = "o" > =< / span > < span class = "n" > max_group_width< / span > < span class = "p" > ,< / span >
< span class = "n" > max_group_depth< / span > < span class = "o" > =< / span > < span class = "n" > max_group_depth< / span > < span class = "p" > ,< / span >
< span class = "n" > _seen< / span > < span class = "o" > =< / span > < span class = "n" > _seen< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > cause< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "k" > if< / span > < span class = "n" > compact< / span > < span class = "p" > :< / span >
< span class = "n" > need_context< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "n" > cause< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span >
< span class = "n" > e< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span >
< span class = "ow" > not< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __suppress_context__< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > need_context< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __context__< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span >
< span class = "ow" > and< / span > < span class = "n" > need_context< / span > < span class = "ow" > and< / span > < span class = "nb" > id< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __context__< / span > < span class = "p" > )< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > _seen< / span > < span class = "p" > ):< / span >
< span class = "n" > context< / span > < span class = "o" > =< / span > < span class = "n" > TracebackException< / span > < span class = "p" > (< / span >
< span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __context__< / span > < span class = "p" > ),< / span >
< span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __context__< / span > < span class = "p" > ,< / span >
< span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __context__< / span > < span class = "o" > .< / span > < span class = "n" > __traceback__< / span > < span class = "p" > ,< / span >
< span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span >
< span class = "n" > lookup_lines< / span > < span class = "o" > =< / span > < span class = "n" > lookup_lines< / span > < span class = "p" > ,< / span >
< span class = "n" > capture_locals< / span > < span class = "o" > =< / span > < span class = "n" > capture_locals< / span > < span class = "p" > ,< / span >
< span class = "n" > max_group_width< / span > < span class = "o" > =< / span > < span class = "n" > max_group_width< / span > < span class = "p" > ,< / span >
< span class = "n" > max_group_depth< / span > < span class = "o" > =< / span > < span class = "n" > max_group_depth< / span > < span class = "p" > ,< / span >
< span class = "n" > _seen< / span > < span class = "o" > =< / span > < span class = "n" > _seen< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > context< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "k" > if< / span > < span class = "n" > e< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "p" > ,< / span > < span class = "n" > BaseExceptionGroup< / span > < span class = "p" > ):< / span >
< span class = "n" > exceptions< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "k" > for< / span > < span class = "n" > exc< / span > < span class = "ow" > in< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > exceptions< / span > < span class = "p" > :< / span >
< span class = "n" > texc< / span > < span class = "o" > =< / span > < span class = "n" > TracebackException< / span > < span class = "p" > (< / span >
< span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ),< / span >
< span class = "n" > exc< / span > < span class = "p" > ,< / span >
< span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > __traceback__< / span > < span class = "p" > ,< / span >
< span class = "n" > limit< / span > < span class = "o" > =< / span > < span class = "n" > limit< / span > < span class = "p" > ,< / span >
< span class = "n" > lookup_lines< / span > < span class = "o" > =< / span > < span class = "n" > lookup_lines< / span > < span class = "p" > ,< / span >
< span class = "n" > capture_locals< / span > < span class = "o" > =< / span > < span class = "n" > capture_locals< / span > < span class = "p" > ,< / span >
< span class = "n" > max_group_width< / span > < span class = "o" > =< / span > < span class = "n" > max_group_width< / span > < span class = "p" > ,< / span >
< span class = "n" > max_group_depth< / span > < span class = "o" > =< / span > < span class = "n" > max_group_depth< / span > < span class = "p" > ,< / span >
< span class = "n" > _seen< / span > < span class = "o" > =< / span > < span class = "n" > _seen< / span > < span class = "p" > )< / span >
< span class = "n" > exceptions< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > texc< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > exceptions< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "n" > te< / span > < span class = "o" > .< / span > < span class = "n" > __cause__< / span > < span class = "o" > =< / span > < span class = "n" > cause< / span >
< span class = "n" > te< / span > < span class = "o" > .< / span > < span class = "n" > __context__< / span > < span class = "o" > =< / span > < span class = "n" > context< / span >
< span class = "n" > te< / span > < span class = "o" > .< / span > < span class = "n" > exceptions< / span > < span class = "o" > =< / span > < span class = "n" > exceptions< / span >
< span class = "k" > if< / span > < span class = "n" > cause< / span > < span class = "p" > :< / span >
< span class = "n" > queue< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > ((< / span > < span class = "n" > te< / span > < span class = "o" > .< / span > < span class = "n" > __cause__< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __cause__< / span > < span class = "p" > ))< / span >
< span class = "k" > if< / span > < span class = "n" > context< / span > < span class = "p" > :< / span >
< span class = "n" > queue< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > ((< / span > < span class = "n" > te< / span > < span class = "o" > .< / span > < span class = "n" > __context__< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > __context__< / span > < span class = "p" > ))< / span >
< span class = "k" > if< / span > < span class = "n" > exceptions< / span > < span class = "p" > :< / span >
< span class = "n" > queue< / span > < span class = "o" > .< / span > < span class = "n" > extend< / span > < span class = "p" > (< / span > < span class = "nb" > zip< / span > < span class = "p" > (< / span > < span class = "n" > te< / span > < span class = "o" > .< / span > < span class = "n" > exceptions< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "o" > .< / span > < span class = "n" > exceptions< / span > < span class = "p" > ))< / span >
< span class = "nd" > @classmethod< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > from_exception< / span > < span class = "p" > (< / span > < span class = "bp" > cls< / span > < span class = "p" > ,< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "n" > args< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Create a TracebackException from an exception." " " < / span >
< span class = "k" > return< / span > < span class = "bp" > cls< / span > < span class = "p" > (< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "p" > ),< / span > < span class = "n" > exc< / span > < span class = "p" > ,< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > __traceback__< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "n" > args< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > )< / span >
< span class = "nd" > @property< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > exc_type< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "n" > warnings< / span > < span class = "o" > .< / span > < span class = "n" > warn< / span > < span class = "p" > (< / span > < span class = "s1" > ' Deprecated in 3.13. Use exc_type_str instead.' < / span > < span class = "p" > ,< / span >
< span class = "ne" > DeprecationWarning< / span > < span class = "p" > ,< / span > < span class = "n" > stacklevel< / span > < span class = "o" > =< / span > < span class = "mi" > 2< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _exc_type< / span >
< span class = "nd" > @property< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > exc_type_str< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _have_exc_type< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "n" > stype< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exc_type_qualname< / span >
< span class = "n" > smod< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exc_type_module< / span >
< span class = "k" > if< / span > < span class = "n" > smod< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "s2" > " __main__" < / span > < span class = "p" > ,< / span > < span class = "s2" > " builtins" < / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > smod< / span > < span class = "p" > ,< / span > < span class = "nb" > str< / span > < span class = "p" > ):< / span >
< span class = "n" > smod< / span > < span class = "o" > =< / span > < span class = "s2" > " < unknown> " < / span >
< span class = "n" > stype< / span > < span class = "o" > =< / span > < span class = "n" > smod< / span > < span class = "o" > +< / span > < span class = "s1" > ' .' < / span > < span class = "o" > +< / span > < span class = "n" > stype< / span >
< span class = "k" > return< / span > < span class = "n" > stype< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _load_lines< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Private API. force all lines in the stack to be loaded." " " < / span >
< span class = "k" > for< / span > < span class = "n" > frame< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > stack< / span > < span class = "p" > :< / span >
< span class = "n" > frame< / span > < span class = "o" > .< / span > < span class = "n" > line< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __eq__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > other< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > other< / span > < span class = "p" > ,< / span > < span class = "n" > TracebackException< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "vm" > __dict__< / span > < span class = "o" > ==< / span > < span class = "n" > other< / span > < span class = "o" > .< / span > < span class = "vm" > __dict__< / span >
< span class = "k" > return< / span > < span class = "bp" > NotImplemented< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "fm" > __str__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > format_exception_only< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "p" > ,< / span > < span class = "n" > show_group< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span > < span class = "n" > _depth< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Format the exception part of the traceback.< / span >
< span class = "sd" > The return value is a generator of strings, each ending in a newline.< / span >
< span class = "sd" > Generator yields the exception message.< / span >
< span class = "sd" > For :exc:`SyntaxError` exceptions, it< / span >
< span class = "sd" > also yields (before the exception message)< / span >
< span class = "sd" > several lines that (when printed)< / span >
< span class = "sd" > display detailed information about where the syntax error occurred.< / span >
< span class = "sd" > Following the message, generator also yields< / span >
< span class = "sd" > all the exception' s ``__notes__``.< / span >
< span class = "sd" > When *show_group* is ``True``, and the exception is an instance of< / span >
< span class = "sd" > :exc:`BaseExceptionGroup`, the nested exceptions are included as< / span >
< span class = "sd" > well, recursively, with indentation relative to their nesting depth.< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " colorize" < / span > < span class = "p" > ,< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "n" > indent< / span > < span class = "o" > =< / span > < span class = "mi" > 3< / span > < span class = "o" > *< / span > < span class = "n" > _depth< / span > < span class = "o" > *< / span > < span class = "s1" > ' ' < / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _have_exc_type< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "n" > indent< / span > < span class = "o" > +< / span > < span class = "n" > _format_final_exc_line< / span > < span class = "p" > (< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span >
< span class = "n" > stype< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exc_type_str< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _is_syntax_error< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > _depth< / span > < span class = "o" > > < / span > < span class = "mi" > 0< / span > < span class = "p" > :< / span >
< span class = "c1" > # Nested exceptions needs correct handling of multiline messages.< / span >
< span class = "n" > formatted< / span > < span class = "o" > =< / span > < span class = "n" > _format_final_exc_line< / span > < span class = "p" > (< / span >
< span class = "n" > stype< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span > < span class = "p" > ,< / span > < span class = "n" > insert_final_newline< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span >
< span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > split< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "p" > )< / span >
< span class = "k" > yield from< / span > < span class = "p" > [< / span >
< span class = "n" > indent< / span > < span class = "o" > +< / span > < span class = "n" > l< / span > < span class = "o" > +< / span > < span class = "s1" > ' < / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span >
< span class = "k" > for< / span > < span class = "n" > l< / span > < span class = "ow" > in< / span > < span class = "n" > formatted< / span >
< span class = "p" > ]< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "n" > _format_final_exc_line< / span > < span class = "p" > (< / span > < span class = "n" > stype< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > yield from< / span > < span class = "p" > [< / span > < span class = "n" > indent< / span > < span class = "o" > +< / span > < span class = "n" > l< / span > < span class = "k" > for< / span > < span class = "n" > l< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _format_syntax_error< / span > < span class = "p" > (< / span > < span class = "n" > stype< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > )]< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span >
< span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __notes__< / span > < span class = "p" > ,< / span > < span class = "n" > collections< / span > < span class = "o" > .< / span > < span class = "n" > abc< / span > < span class = "o" > .< / span > < span class = "n" > Sequence< / span > < span class = "p" > )< / span >
< span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __notes__< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "nb" > str< / span > < span class = "p" > ,< / span > < span class = "nb" > bytes< / span > < span class = "p" > ))< / span >
< span class = "p" > ):< / span >
< span class = "k" > for< / span > < span class = "n" > note< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __notes__< / span > < span class = "p" > :< / span >
< span class = "n" > note< / span > < span class = "o" > =< / span > < span class = "n" > _safe_string< / span > < span class = "p" > (< / span > < span class = "n" > note< / span > < span class = "p" > ,< / span > < span class = "s1" > ' note' < / span > < span class = "p" > )< / span >
< span class = "k" > yield from< / span > < span class = "p" > [< / span > < span class = "n" > indent< / span > < span class = "o" > +< / span > < span class = "n" > l< / span > < span class = "o" > +< / span > < span class = "s1" > ' < / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "k" > for< / span > < span class = "n" > l< / span > < span class = "ow" > in< / span > < span class = "n" > note< / span > < span class = "o" > .< / span > < span class = "n" > split< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "p" > )]< / span >
< span class = "k" > elif< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __notes__< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "n" > indent< / span > < span class = "o" > +< / span > < span class = "s2" > " < / span > < span class = "si" > {}< / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > _safe_string< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __notes__< / span > < span class = "p" > ,< / span > < span class = "s1" > ' __notes__' < / span > < span class = "p" > ,< / span > < span class = "n" > func< / span > < span class = "o" > =< / span > < span class = "nb" > repr< / span > < span class = "p" > ))< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exceptions< / span > < span class = "ow" > and< / span > < span class = "n" > show_group< / span > < span class = "p" > :< / span >
< span class = "k" > for< / span > < span class = "n" > ex< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > exceptions< / span > < span class = "p" > :< / span >
< span class = "k" > yield from< / span > < span class = "n" > ex< / span > < span class = "o" > .< / span > < span class = "n" > format_exception_only< / span > < span class = "p" > (< / span > < span class = "n" > show_group< / span > < span class = "o" > =< / span > < span class = "n" > show_group< / span > < span class = "p" > ,< / span > < span class = "n" > _depth< / span > < span class = "o" > =< / span > < span class = "n" > _depth< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _format_syntax_error< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > stype< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Format SyntaxError exceptions (internal helper)." " " < / span >
< span class = "c1" > # Show exactly where the problem was found.< / span >
< span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " colorize" < / span > < span class = "p" > ,< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "n" > filename_suffix< / span > < span class = "o" > =< / span > < span class = "s1" > ' ' < / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > colorize< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "s1" > ' File < / span > < span class = "si" > {}< / span > < span class = "s1" > " < / span > < span class = "si" > {}< / span > < span class = "s1" > " < / span > < span class = "si" > {}< / span > < span class = "s1" > , line < / span > < span class = "si" > {}{}{}< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > MAGENTA< / span > < span class = "p" > ,< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "ow" > or< / span > < span class = "s2" > " < string> " < / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > MAGENTA< / span > < span class = "p" > ,< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > ,< / span >
< span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "s1" > ' File " < / span > < span class = "si" > {}< / span > < span class = "s1" > " , line < / span > < span class = "si" > {}< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "ow" > or< / span > < span class = "s2" > " < string> " < / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > filename_suffix< / span > < span class = "o" > =< / span > < span class = "s1" > ' (< / span > < span class = "si" > {}< / span > < span class = "s1" > )' < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "p" > )< / span >
< span class = "n" > text< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > text< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > text< / span > < span class = "p" > ,< / span > < span class = "nb" > str< / span > < span class = "p" > ):< / span >
< span class = "c1" > # text = " foo\n" < / span >
< span class = "c1" > # rtext = " foo" < / span >
< span class = "c1" > # ltext = " foo" < / span >
< span class = "n" > rtext< / span > < span class = "o" > =< / span > < span class = "n" > text< / span > < span class = "o" > .< / span > < span class = "n" > rstrip< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "p" > )< / span >
< span class = "n" > ltext< / span > < span class = "o" > =< / span > < span class = "n" > rtext< / span > < span class = "o" > .< / span > < span class = "n" > lstrip< / span > < span class = "p" > (< / span > < span class = "s1" > ' < / span > < span class = "se" > \n\f< / span > < span class = "s1" > ' < / span > < span class = "p" > )< / span >
< span class = "n" > spaces< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > rtext< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > ltext< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > offset< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "s1" > ' < / span > < span class = "si" > {}< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > ltext< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > offset< / span > < span class = "p" > ,< / span > < span class = "nb" > int< / span > < span class = "p" > ):< / span >
< span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > offset< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > lineno< / span > < span class = "o" > ==< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > end_lineno< / span > < span class = "p" > :< / span >
< span class = "n" > end_offset< / span > < span class = "o" > =< / span > < span class = "p" > (< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > end_offset< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span >
< span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > end_offset< / span > < span class = "p" > ,< / span > < span class = "nb" > int< / span > < span class = "p" > )< / span >
< span class = "ow" > and< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > end_offset< / span > < span class = "o" > !=< / span > < span class = "mi" > 0< / span >
< span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "n" > offset< / span >
< span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > end_offset< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > rtext< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > text< / span > < span class = "ow" > and< / span > < span class = "n" > offset< / span > < span class = "o" > > < / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > text< / span > < span class = "p" > ):< / span >
< span class = "n" > offset< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > rtext< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > text< / span > < span class = "ow" > and< / span > < span class = "n" > end_offset< / span > < span class = "o" > > < / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > text< / span > < span class = "p" > ):< / span >
< span class = "n" > end_offset< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > rtext< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "k" > if< / span > < span class = "n" > offset< / span > < span class = "o" > > =< / span > < span class = "n" > end_offset< / span > < span class = "ow" > or< / span > < span class = "n" > end_offset< / span > < span class = "o" > < < / span > < span class = "mi" > 0< / span > < span class = "p" > :< / span >
< span class = "n" > end_offset< / span > < span class = "o" > =< / span > < span class = "n" > offset< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "c1" > # Convert 1-based column offset to 0-based index into stripped text< / span >
< span class = "n" > colno< / span > < span class = "o" > =< / span > < span class = "n" > offset< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "o" > -< / span > < span class = "n" > spaces< / span >
< span class = "n" > end_colno< / span > < span class = "o" > =< / span > < span class = "n" > end_offset< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "o" > -< / span > < span class = "n" > spaces< / span >
< span class = "n" > caretspace< / span > < span class = "o" > =< / span > < span class = "s1" > ' ' < / span >
< span class = "k" > if< / span > < span class = "n" > colno< / span > < span class = "o" > > =< / span > < span class = "mi" > 0< / span > < span class = "p" > :< / span >
< span class = "c1" > # non-space whitespace (likes tabs) must be kept for alignment< / span >
< span class = "n" > caretspace< / span > < span class = "o" > =< / span > < span class = "p" > ((< / span > < span class = "n" > c< / span > < span class = "k" > if< / span > < span class = "n" > c< / span > < span class = "o" > .< / span > < span class = "n" > isspace< / span > < span class = "p" > ()< / span > < span class = "k" > else< / span > < span class = "s1" > ' ' < / span > < span class = "p" > )< / span > < span class = "k" > for< / span > < span class = "n" > c< / span > < span class = "ow" > in< / span > < span class = "n" > ltext< / span > < span class = "p" > [:< / span > < span class = "n" > colno< / span > < span class = "p" > ])< / span >
< span class = "n" > start_color< / span > < span class = "o" > =< / span > < span class = "n" > end_color< / span > < span class = "o" > =< / span > < span class = "s2" > " " < / span >
< span class = "k" > if< / span > < span class = "n" > colorize< / span > < span class = "p" > :< / span >
< span class = "c1" > # colorize from colno to end_colno< / span >
< span class = "n" > ltext< / span > < span class = "o" > =< / span > < span class = "p" > (< / span >
< span class = "n" > ltext< / span > < span class = "p" > [:< / span > < span class = "n" > colno< / span > < span class = "p" > ]< / span > < span class = "o" > +< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > BOLD_RED< / span > < span class = "o" > +< / span > < span class = "n" > ltext< / span > < span class = "p" > [< / span > < span class = "n" > colno< / span > < span class = "p" > :< / span > < span class = "n" > end_colno< / span > < span class = "p" > ]< / span > < span class = "o" > +< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "o" > +< / span >
< span class = "n" > ltext< / span > < span class = "p" > [< / span > < span class = "n" > end_colno< / span > < span class = "p" > :]< / span >
< span class = "p" > )< / span >
< span class = "n" > start_color< / span > < span class = "o" > =< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > BOLD_RED< / span >
< span class = "n" > end_color< / span > < span class = "o" > =< / span > < span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span >
< span class = "k" > yield< / span > < span class = "s1" > ' < / span > < span class = "si" > {}< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > ltext< / span > < span class = "p" > )< / span >
< span class = "k" > yield< / span > < span class = "s1" > ' < / span > < span class = "si" > {}{}{}{}< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span >
< span class = "s2" > " " < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > caretspace< / span > < span class = "p" > ),< / span >
< span class = "n" > start_color< / span > < span class = "p" > ,< / span >
< span class = "p" > (< / span > < span class = "s1" > ' ^' < / span > < span class = "o" > *< / span > < span class = "p" > (< / span > < span class = "n" > end_colno< / span > < span class = "o" > -< / span > < span class = "n" > colno< / span > < span class = "p" > )),< / span >
< span class = "n" > end_color< / span > < span class = "p" > ,< / span >
< span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "s1" > ' < / span > < span class = "si" > {}< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > ltext< / span > < span class = "p" > )< / span >
< span class = "n" > msg< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > msg< / span > < span class = "ow" > or< / span > < span class = "s2" > " < no detail available> " < / span >
< span class = "k" > if< / span > < span class = "n" > colorize< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "s2" > " < / span > < span class = "si" > {}{}{}< / span > < span class = "s2" > : < / span > < span class = "si" > {}{}{}{}< / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > BOLD_MAGENTA< / span > < span class = "p" > ,< / span >
< span class = "n" > stype< / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > MAGENTA< / span > < span class = "p" > ,< / span >
< span class = "n" > msg< / span > < span class = "p" > ,< / span >
< span class = "n" > ANSIColors< / span > < span class = "o" > .< / span > < span class = "n" > RESET< / span > < span class = "p" > ,< / span >
< span class = "n" > filename_suffix< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "s2" > " < / span > < span class = "si" > {}< / span > < span class = "s2" > : < / span > < span class = "si" > {}{}< / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > stype< / span > < span class = "p" > ,< / span > < span class = "n" > msg< / span > < span class = "p" > ,< / span > < span class = "n" > filename_suffix< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > format< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span > < span class = "n" > _ctx< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Format the exception.< / span >
< span class = "sd" > If chain is not *True*, *__cause__* and *__context__* will not be formatted.< / span >
< span class = "sd" > The return value is a generator of strings, each ending in a newline and< / span >
< span class = "sd" > some containing internal newlines. `print_exception` is a wrapper around< / span >
< span class = "sd" > this method which just prints the lines to a file.< / span >
< span class = "sd" > The message indicating which exception occurred is always the last< / span >
< span class = "sd" > string in the output.< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " colorize" < / span > < span class = "p" > ,< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > _ctx< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > _ctx< / span > < span class = "o" > =< / span > < span class = "n" > _ExceptionPrintContext< / span > < span class = "p" > ()< / span >
< span class = "n" > output< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > exc< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span >
< span class = "k" > if< / span > < span class = "n" > chain< / span > < span class = "p" > :< / span >
< span class = "k" > while< / span > < span class = "n" > exc< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > __cause__< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > chained_msg< / span > < span class = "o" > =< / span > < span class = "n" > _cause_message< / span >
< span class = "n" > chained_exc< / span > < span class = "o" > =< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > __cause__< / span >
< span class = "k" > elif< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > __context__< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "ow" > and< / span >
< span class = "ow" > not< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > __suppress_context__< / span > < span class = "p" > ):< / span >
< span class = "n" > chained_msg< / span > < span class = "o" > =< / span > < span class = "n" > _context_message< / span >
< span class = "n" > chained_exc< / span > < span class = "o" > =< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > __context__< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > chained_msg< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "n" > chained_exc< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "n" > output< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > ((< / span > < span class = "n" > chained_msg< / span > < span class = "p" > ,< / span > < span class = "n" > exc< / span > < span class = "p" > ))< / span >
< span class = "n" > exc< / span > < span class = "o" > =< / span > < span class = "n" > chained_exc< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > output< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > ((< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > exc< / span > < span class = "p" > ))< / span >
< span class = "k" > for< / span > < span class = "n" > msg< / span > < span class = "p" > ,< / span > < span class = "n" > exc< / span > < span class = "ow" > in< / span > < span class = "nb" > reversed< / span > < span class = "p" > (< / span > < span class = "n" > output< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > msg< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > yield from< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > emit< / span > < span class = "p" > (< / span > < span class = "n" > msg< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > exceptions< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > stack< / span > < span class = "p" > :< / span >
< span class = "k" > yield from< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > emit< / span > < span class = "p" > (< / span > < span class = "s1" > ' Traceback (most recent call last):< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "p" > )< / span >
< span class = "k" > yield from< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > emit< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > stack< / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > ))< / span >
< span class = "k" > yield from< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > emit< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > format_exception_only< / span > < span class = "p" > (< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > ))< / span >
< span class = "k" > elif< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > exception_group_depth< / span > < span class = "o" > > < / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > max_group_depth< / span > < span class = "p" > :< / span >
< span class = "c1" > # exception group, but depth exceeds limit< / span >
< span class = "k" > yield from< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > emit< / span > < span class = "p" > (< / span >
< span class = "sa" > f< / span > < span class = "s2" > " ... (max_group_depth is < / span > < span class = "si" > {< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > max_group_depth< / span > < span class = "si" > }< / span > < span class = "s2" > )< / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c1" > # format exception group< / span >
< span class = "n" > is_toplevel< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > exception_group_depth< / span > < span class = "o" > ==< / span > < span class = "mi" > 0< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > is_toplevel< / span > < span class = "p" > :< / span >
< span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > exception_group_depth< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "k" > if< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > stack< / span > < span class = "p" > :< / span >
< span class = "k" > yield from< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > emit< / span > < span class = "p" > (< / span >
< span class = "s1" > ' Exception Group Traceback (most recent call last):< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "p" > ,< / span >
< span class = "n" > margin_char< / span > < span class = "o" > =< / span > < span class = "s1" > ' +' < / span > < span class = "k" > if< / span > < span class = "n" > is_toplevel< / span > < span class = "k" > else< / span > < span class = "kc" > None< / span > < span class = "p" > )< / span >
< span class = "k" > yield from< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > emit< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > stack< / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > ))< / span >
< span class = "k" > yield from< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > emit< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > format_exception_only< / span > < span class = "p" > (< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > ))< / span >
< span class = "n" > num_excs< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > exceptions< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > num_excs< / span > < span class = "o" > < =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > max_group_width< / span > < span class = "p" > :< / span >
< span class = "n" > n< / span > < span class = "o" > =< / span > < span class = "n" > num_excs< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > n< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > max_group_width< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > need_close< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span >
< span class = "k" > for< / span > < span class = "n" > i< / span > < span class = "ow" > in< / span > < span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "n" > n< / span > < span class = "p" > ):< / span >
< span class = "n" > last_exc< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "n" > i< / span > < span class = "o" > ==< / span > < span class = "n" > n< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > last_exc< / span > < span class = "p" > :< / span >
< span class = "c1" > # The closing frame may be added by a recursive call< / span >
< span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > need_close< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > max_group_width< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > truncated< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "n" > i< / span > < span class = "o" > > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > max_group_width< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > truncated< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span >
< span class = "n" > title< / span > < span class = "o" > =< / span > < span class = "sa" > f< / span > < span class = "s1" > ' < / span > < span class = "si" > {< / span > < span class = "n" > i< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "si" > }< / span > < span class = "s1" > ' < / span > < span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > truncated< / span > < span class = "k" > else< / span > < span class = "s1" > ' ...' < / span >
< span class = "k" > yield< / span > < span class = "p" > (< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > indent< / span > < span class = "p" > ()< / span > < span class = "o" > +< / span >
< span class = "p" > (< / span > < span class = "s1" > ' +-' < / span > < span class = "k" > if< / span > < span class = "n" > i< / span > < span class = "o" > ==< / span > < span class = "mi" > 0< / span > < span class = "k" > else< / span > < span class = "s1" > ' ' < / span > < span class = "p" > )< / span > < span class = "o" > +< / span >
< span class = "sa" > f< / span > < span class = "s1" > ' +---------------- < / span > < span class = "si" > {< / span > < span class = "n" > title< / span > < span class = "si" > }< / span > < span class = "s1" > ----------------< / span > < span class = "se" > \n< / span > < span class = "s1" > ' < / span > < span class = "p" > )< / span >
< span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > exception_group_depth< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > truncated< / span > < span class = "p" > :< / span >
< span class = "k" > yield from< / span > < span class = "n" > exc< / span > < span class = "o" > .< / span > < span class = "n" > exceptions< / span > < span class = "p" > [< / span > < span class = "n" > i< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "n" > chain< / span > < span class = "p" > ,< / span > < span class = "n" > _ctx< / span > < span class = "o" > =< / span > < span class = "n" > _ctx< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > remaining< / span > < span class = "o" > =< / span > < span class = "n" > num_excs< / span > < span class = "o" > -< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > max_group_width< / span >
< span class = "n" > plural< / span > < span class = "o" > =< / span > < span class = "s1" > ' s' < / span > < span class = "k" > if< / span > < span class = "n" > remaining< / span > < span class = "o" > > < / span > < span class = "mi" > 1< / span > < span class = "k" > else< / span > < span class = "s1" > ' ' < / span >
< span class = "k" > yield from< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > emit< / span > < span class = "p" > (< / span >
< span class = "sa" > f< / span > < span class = "s2" > " and < / span > < span class = "si" > {< / span > < span class = "n" > remaining< / span > < span class = "si" > }< / span > < span class = "s2" > more exception< / span > < span class = "si" > {< / span > < span class = "n" > plural< / span > < span class = "si" > }< / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > last_exc< / span > < span class = "ow" > and< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > need_close< / span > < span class = "p" > :< / span >
< span class = "k" > yield< / span > < span class = "p" > (< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > indent< / span > < span class = "p" > ()< / span > < span class = "o" > +< / span >
< span class = "s2" > " +------------------------------------< / span > < span class = "se" > \n< / span > < span class = "s2" > " < / span > < span class = "p" > )< / span >
< span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > need_close< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span >
< span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > exception_group_depth< / span > < span class = "o" > -=< / span > < span class = "mi" > 1< / span >
< span class = "k" > if< / span > < span class = "n" > is_toplevel< / span > < span class = "p" > :< / span >
< span class = "k" > assert< / span > < span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > exception_group_depth< / span > < span class = "o" > ==< / span > < span class = "mi" > 1< / span >
< span class = "n" > _ctx< / span > < span class = "o" > .< / span > < span class = "n" > exception_group_depth< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > print< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "kc" > True< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > kwargs< / span > < span class = "p" > ):< / span >
< span class = "w" > < / span > < span class = "sd" > " " " Print the result of self.format(chain=chain) to ' file' ." " " < / span >
< span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > kwargs< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s2" > " colorize" < / span > < span class = "p" > ,< / span > < span class = "kc" > False< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > file< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > stderr< / span >
< span class = "k" > for< / span > < span class = "n" > line< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > format< / span > < span class = "p" > (< / span > < span class = "n" > chain< / span > < span class = "o" > =< / span > < span class = "n" > chain< / span > < span class = "p" > ,< / span > < span class = "n" > colorize< / span > < span class = "o" > =< / span > < span class = "n" > colorize< / span > < span class = "p" > ):< / span >
< span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > ,< / span > < span class = "n" > file< / span > < span class = "o" > =< / span > < span class = "n" > file< / span > < span class = "p" > ,< / span > < span class = "n" > end< / span > < span class = "o" > =< / span > < span class = "s2" > " " < / span > < span class = "p" > )< / span >
< span class = "n" > _MAX_CANDIDATE_ITEMS< / span > < span class = "o" > =< / span > < span class = "mi" > 750< / span >
< span class = "n" > _MAX_STRING_SIZE< / span > < span class = "o" > =< / span > < span class = "mi" > 40< / span >
< span class = "n" > _MOVE_COST< / span > < span class = "o" > =< / span > < span class = "mi" > 2< / span >
< span class = "n" > _CASE_COST< / span > < span class = "o" > =< / span > < span class = "mi" > 1< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _substitution_cost< / span > < span class = "p" > (< / span > < span class = "n" > ch_a< / span > < span class = "p" > ,< / span > < span class = "n" > ch_b< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > ch_a< / span > < span class = "o" > ==< / span > < span class = "n" > ch_b< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "mi" > 0< / span >
< span class = "k" > if< / span > < span class = "n" > ch_a< / span > < span class = "o" > .< / span > < span class = "n" > lower< / span > < span class = "p" > ()< / span > < span class = "o" > ==< / span > < span class = "n" > ch_b< / span > < span class = "o" > .< / span > < span class = "n" > lower< / span > < span class = "p" > ():< / span >
< span class = "k" > return< / span > < span class = "n" > _CASE_COST< / span >
< span class = "k" > return< / span > < span class = "n" > _MOVE_COST< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _compute_suggestion_error< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "n" > tb< / span > < span class = "p" > ,< / span > < span class = "n" > wrong_name< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > wrong_name< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "ow" > or< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > wrong_name< / span > < span class = "p" > ,< / span > < span class = "nb" > str< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "ne" > AttributeError< / span > < span class = "p" > ):< / span >
< span class = "n" > obj< / span > < span class = "o" > =< / span > < span class = "n" > exc_value< / span > < span class = "o" > .< / span > < span class = "n" > obj< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "nb" > dir< / span > < span class = "p" > (< / span > < span class = "n" > obj< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > TypeError< / span > < span class = "p" > :< / span > < span class = "c1" > # Attributes are unsortable, e.g. int and str< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > obj< / span > < span class = "o" > .< / span > < span class = "vm" > __class__< / span > < span class = "o" > .< / span > < span class = "vm" > __dict__< / span > < span class = "o" > .< / span > < span class = "n" > keys< / span > < span class = "p" > ())< / span > < span class = "o" > +< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > obj< / span > < span class = "o" > .< / span > < span class = "vm" > __dict__< / span > < span class = "o" > .< / span > < span class = "n" > keys< / span > < span class = "p" > ())< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "nb" > sorted< / span > < span class = "p" > ([< / span > < span class = "n" > x< / span > < span class = "k" > for< / span > < span class = "n" > x< / span > < span class = "ow" > in< / span > < span class = "n" > d< / span > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > x< / span > < span class = "p" > ,< / span > < span class = "nb" > str< / span > < span class = "p" > )])< / span >
< span class = "n" > hide_underscored< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "n" > wrong_name< / span > < span class = "p" > [:< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "o" > !=< / span > < span class = "s1" > ' _' < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > hide_underscored< / span > < span class = "ow" > and< / span > < span class = "n" > tb< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > while< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_next< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > tb< / span > < span class = "o" > =< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_next< / span >
< span class = "n" > frame< / span > < span class = "o" > =< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_frame< / span >
< span class = "k" > if< / span > < span class = "s1" > ' self' < / span > < span class = "ow" > in< / span > < span class = "n" > frame< / span > < span class = "o" > .< / span > < span class = "n" > f_locals< / span > < span class = "ow" > and< / span > < span class = "n" > frame< / span > < span class = "o" > .< / span > < span class = "n" > f_locals< / span > < span class = "p" > [< / span > < span class = "s1" > ' self' < / span > < span class = "p" > ]< / span > < span class = "ow" > is< / span > < span class = "n" > obj< / span > < span class = "p" > :< / span >
< span class = "n" > hide_underscored< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span >
< span class = "k" > if< / span > < span class = "n" > hide_underscored< / span > < span class = "p" > :< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > x< / span > < span class = "k" > for< / span > < span class = "n" > x< / span > < span class = "ow" > in< / span > < span class = "n" > d< / span > < span class = "k" > if< / span > < span class = "n" > x< / span > < span class = "p" > [:< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "o" > !=< / span > < span class = "s1" > ' _' < / span > < span class = "p" > ]< / span >
< span class = "k" > except< / span > < span class = "ne" > Exception< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "k" > elif< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "ne" > ImportError< / span > < span class = "p" > ):< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > mod< / span > < span class = "o" > =< / span > < span class = "nb" > __import__< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > )< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "nb" > dir< / span > < span class = "p" > (< / span > < span class = "n" > mod< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > TypeError< / span > < span class = "p" > :< / span > < span class = "c1" > # Attributes are unsortable, e.g. int and str< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > mod< / span > < span class = "o" > .< / span > < span class = "vm" > __dict__< / span > < span class = "o" > .< / span > < span class = "n" > keys< / span > < span class = "p" > ())< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "nb" > sorted< / span > < span class = "p" > ([< / span > < span class = "n" > x< / span > < span class = "k" > for< / span > < span class = "n" > x< / span > < span class = "ow" > in< / span > < span class = "n" > d< / span > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > x< / span > < span class = "p" > ,< / span > < span class = "nb" > str< / span > < span class = "p" > )])< / span >
< span class = "k" > if< / span > < span class = "n" > wrong_name< / span > < span class = "p" > [:< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "o" > !=< / span > < span class = "s1" > ' _' < / span > < span class = "p" > :< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > x< / span > < span class = "k" > for< / span > < span class = "n" > x< / span > < span class = "ow" > in< / span > < span class = "n" > d< / span > < span class = "k" > if< / span > < span class = "n" > x< / span > < span class = "p" > [:< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "o" > !=< / span > < span class = "s1" > ' _' < / span > < span class = "p" > ]< / span >
< span class = "k" > except< / span > < span class = "ne" > Exception< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > assert< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > exc_value< / span > < span class = "p" > ,< / span > < span class = "ne" > NameError< / span > < span class = "p" > )< / span >
< span class = "c1" > # find most recent frame< / span >
< span class = "k" > if< / span > < span class = "n" > tb< / span > < span class = "ow" > is< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "k" > while< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_next< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "kc" > None< / span > < span class = "p" > :< / span >
< span class = "n" > tb< / span > < span class = "o" > =< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_next< / span >
< span class = "n" > frame< / span > < span class = "o" > =< / span > < span class = "n" > tb< / span > < span class = "o" > .< / span > < span class = "n" > tb_frame< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "p" > (< / span >
< span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > frame< / span > < span class = "o" > .< / span > < span class = "n" > f_locals< / span > < span class = "p" > )< / span >
< span class = "o" > +< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > frame< / span > < span class = "o" > .< / span > < span class = "n" > f_globals< / span > < span class = "p" > )< / span >
< span class = "o" > +< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > frame< / span > < span class = "o" > .< / span > < span class = "n" > f_builtins< / span > < span class = "p" > )< / span >
< span class = "p" > )< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > x< / span > < span class = "k" > for< / span > < span class = "n" > x< / span > < span class = "ow" > in< / span > < span class = "n" > d< / span > < span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > x< / span > < span class = "p" > ,< / span > < span class = "nb" > str< / span > < span class = "p" > )]< / span >
< span class = "c1" > # Check first if we are in a method and the instance< / span >
< span class = "c1" > # has the wrong name as attribute< / span >
< span class = "k" > if< / span > < span class = "s1" > ' self' < / span > < span class = "ow" > in< / span > < span class = "n" > frame< / span > < span class = "o" > .< / span > < span class = "n" > f_locals< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > =< / span > < span class = "n" > frame< / span > < span class = "o" > .< / span > < span class = "n" > f_locals< / span > < span class = "p" > [< / span > < span class = "s1" > ' self' < / span > < span class = "p" > ]< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > has_wrong_name< / span > < span class = "o" > =< / span > < span class = "nb" > hasattr< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > wrong_name< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > Exception< / span > < span class = "p" > :< / span >
< span class = "n" > has_wrong_name< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span >
< span class = "k" > if< / span > < span class = "n" > has_wrong_name< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "sa" > f< / span > < span class = "s2" > " self.< / span > < span class = "si" > {< / span > < span class = "n" > wrong_name< / span > < span class = "si" > }< / span > < span class = "s2" > " < / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "kn" > import< / span > < span class = "w" > < / span > < span class = "nn" > _suggestions< / span >
< span class = "k" > except< / span > < span class = "ne" > ImportError< / span > < span class = "p" > :< / span >
< span class = "k" > pass< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > _suggestions< / span > < span class = "o" > .< / span > < span class = "n" > _generate_suggestions< / span > < span class = "p" > (< / span > < span class = "n" > d< / span > < span class = "p" > ,< / span > < span class = "n" > wrong_name< / span > < span class = "p" > )< / span >
< span class = "c1" > # Compute closest match< / span >
< span class = "k" > if< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > d< / span > < span class = "p" > )< / span > < span class = "o" > > < / span > < span class = "n" > _MAX_CANDIDATE_ITEMS< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "n" > wrong_name_len< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > wrong_name< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > wrong_name_len< / span > < span class = "o" > > < / span > < span class = "n" > _MAX_STRING_SIZE< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "kc" > None< / span >
< span class = "n" > best_distance< / span > < span class = "o" > =< / span > < span class = "n" > wrong_name_len< / span >
< span class = "n" > suggestion< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span >
< span class = "k" > for< / span > < span class = "n" > possible_name< / span > < span class = "ow" > in< / span > < span class = "n" > d< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > possible_name< / span > < span class = "o" > ==< / span > < span class = "n" > wrong_name< / span > < span class = "p" > :< / span >
< span class = "c1" > # A missing attribute is " found" . Don' t suggest it (see GH-88821).< / span >
< span class = "k" > continue< / span >
< span class = "c1" > # No more than 1/3 of the involved characters should need changed.< / span >
< span class = "n" > max_distance< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > possible_name< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "n" > wrong_name_len< / span > < span class = "o" > +< / span > < span class = "mi" > 3< / span > < span class = "p" > )< / span > < span class = "o" > *< / span > < span class = "n" > _MOVE_COST< / span > < span class = "o" > //< / span > < span class = "mi" > 6< / span >
< span class = "c1" > # Don' t take matches we' ve already beaten.< / span >
< span class = "n" > max_distance< / span > < span class = "o" > =< / span > < span class = "nb" > min< / span > < span class = "p" > (< / span > < span class = "n" > max_distance< / span > < span class = "p" > ,< / span > < span class = "n" > best_distance< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span >
< span class = "n" > current_distance< / span > < span class = "o" > =< / span > < span class = "n" > _levenshtein_distance< / span > < span class = "p" > (< / span > < span class = "n" > wrong_name< / span > < span class = "p" > ,< / span > < span class = "n" > possible_name< / span > < span class = "p" > ,< / span > < span class = "n" > max_distance< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > current_distance< / span > < span class = "o" > > < / span > < span class = "n" > max_distance< / span > < span class = "p" > :< / span >
< span class = "k" > continue< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > suggestion< / span > < span class = "ow" > or< / span > < span class = "n" > current_distance< / span > < span class = "o" > < < / span > < span class = "n" > best_distance< / span > < span class = "p" > :< / span >
< span class = "n" > suggestion< / span > < span class = "o" > =< / span > < span class = "n" > possible_name< / span >
< span class = "n" > best_distance< / span > < span class = "o" > =< / span > < span class = "n" > current_distance< / span >
< span class = "k" > return< / span > < span class = "n" > suggestion< / span >
< span class = "k" > def< / span > < span class = "w" > < / span > < span class = "nf" > _levenshtein_distance< / span > < span class = "p" > (< / span > < span class = "n" > a< / span > < span class = "p" > ,< / span > < span class = "n" > b< / span > < span class = "p" > ,< / span > < span class = "n" > max_cost< / span > < span class = "p" > ):< / span >
< span class = "c1" > # A Python implementation of Python/suggestions.c:levenshtein_distance.< / span >
< span class = "c1" > # Both strings are the same< / span >
< span class = "k" > if< / span > < span class = "n" > a< / span > < span class = "o" > ==< / span > < span class = "n" > b< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "mi" > 0< / span >
< span class = "c1" > # Trim away common affixes< / span >
< span class = "n" > pre< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "k" > while< / span > < span class = "n" > a< / span > < span class = "p" > [< / span > < span class = "n" > pre< / span > < span class = "p" > :]< / span > < span class = "ow" > and< / span > < span class = "n" > b< / span > < span class = "p" > [< / span > < span class = "n" > pre< / span > < span class = "p" > :]< / span > < span class = "ow" > and< / span > < span class = "n" > a< / span > < span class = "p" > [< / span > < span class = "n" > pre< / span > < span class = "p" > ]< / span > < span class = "o" > ==< / span > < span class = "n" > b< / span > < span class = "p" > [< / span > < span class = "n" > pre< / span > < span class = "p" > ]:< / span >
< span class = "n" > pre< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "n" > a< / span > < span class = "o" > =< / span > < span class = "n" > a< / span > < span class = "p" > [< / span > < span class = "n" > pre< / span > < span class = "p" > :]< / span >
< span class = "n" > b< / span > < span class = "o" > =< / span > < span class = "n" > b< / span > < span class = "p" > [< / span > < span class = "n" > pre< / span > < span class = "p" > :]< / span >
< span class = "n" > post< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "k" > while< / span > < span class = "n" > a< / span > < span class = "p" > [:< / span > < span class = "n" > post< / span > < span class = "ow" > or< / span > < span class = "kc" > None< / span > < span class = "p" > ]< / span > < span class = "ow" > and< / span > < span class = "n" > b< / span > < span class = "p" > [:< / span > < span class = "n" > post< / span > < span class = "ow" > or< / span > < span class = "kc" > None< / span > < span class = "p" > ]< / span > < span class = "ow" > and< / span > < span class = "n" > a< / span > < span class = "p" > [< / span > < span class = "n" > post< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "o" > ==< / span > < span class = "n" > b< / span > < span class = "p" > [< / span > < span class = "n" > post< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]:< / span >
< span class = "n" > post< / span > < span class = "o" > -=< / span > < span class = "mi" > 1< / span >
< span class = "n" > a< / span > < span class = "o" > =< / span > < span class = "n" > a< / span > < span class = "p" > [:< / span > < span class = "n" > post< / span > < span class = "ow" > or< / span > < span class = "kc" > None< / span > < span class = "p" > ]< / span >
< span class = "n" > b< / span > < span class = "o" > =< / span > < span class = "n" > b< / span > < span class = "p" > [:< / span > < span class = "n" > post< / span > < span class = "ow" > or< / span > < span class = "kc" > None< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > a< / span > < span class = "ow" > or< / span > < span class = "ow" > not< / span > < span class = "n" > b< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > _MOVE_COST< / span > < span class = "o" > *< / span > < span class = "p" > (< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > a< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "p" > ))< / span >
< span class = "k" > if< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > a< / span > < span class = "p" > )< / span > < span class = "o" > > < / span > < span class = "n" > _MAX_STRING_SIZE< / span > < span class = "ow" > or< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "p" > )< / span > < span class = "o" > > < / span > < span class = "n" > _MAX_STRING_SIZE< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > max_cost< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "c1" > # Prefer shorter buffer< / span >
< span class = "k" > if< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "p" > )< / span > < span class = "o" > < < / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > a< / span > < span class = "p" > ):< / span >
< span class = "n" > a< / span > < span class = "p" > ,< / span > < span class = "n" > b< / span > < span class = "o" > =< / span > < span class = "n" > b< / span > < span class = "p" > ,< / span > < span class = "n" > a< / span >
< span class = "c1" > # Quick fail when a match is impossible< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > a< / span > < span class = "p" > ))< / span > < span class = "o" > *< / span > < span class = "n" > _MOVE_COST< / span > < span class = "o" > > < / span > < span class = "n" > max_cost< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > max_cost< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "c1" > # Instead of producing the whole traditional len(a)-by-len(b)< / span >
< span class = "c1" > # matrix, we can update just one row in place.< / span >
< span class = "c1" > # Initialize the buffer row< / span >
< span class = "n" > row< / span > < span class = "o" > =< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "n" > _MOVE_COST< / span > < span class = "p" > ,< / span > < span class = "n" > _MOVE_COST< / span > < span class = "o" > *< / span > < span class = "p" > (< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > a< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "p" > ),< / span > < span class = "n" > _MOVE_COST< / span > < span class = "p" > ))< / span >
< span class = "n" > result< / span > < span class = "o" > =< / span > < span class = "mi" > 0< / span >
< span class = "k" > for< / span > < span class = "n" > bindex< / span > < span class = "ow" > in< / span > < span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "p" > )):< / span >
< span class = "n" > bchar< / span > < span class = "o" > =< / span > < span class = "n" > b< / span > < span class = "p" > [< / span > < span class = "n" > bindex< / span > < span class = "p" > ]< / span >
< span class = "n" > distance< / span > < span class = "o" > =< / span > < span class = "n" > result< / span > < span class = "o" > =< / span > < span class = "n" > bindex< / span > < span class = "o" > *< / span > < span class = "n" > _MOVE_COST< / span >
< span class = "n" > minimum< / span > < span class = "o" > =< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > maxsize< / span >
< span class = "k" > for< / span > < span class = "n" > index< / span > < span class = "ow" > in< / span > < span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > a< / span > < span class = "p" > )):< / span >
< span class = "c1" > # 1) Previous distance in this row is cost(b[:b_index], a[:index])< / span >
< span class = "n" > substitute< / span > < span class = "o" > =< / span > < span class = "n" > distance< / span > < span class = "o" > +< / span > < span class = "n" > _substitution_cost< / span > < span class = "p" > (< / span > < span class = "n" > bchar< / span > < span class = "p" > ,< / span > < span class = "n" > a< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ])< / span >
< span class = "c1" > # 2) cost(b[:b_index], a[:index+1]) from previous row< / span >
< span class = "n" > distance< / span > < span class = "o" > =< / span > < span class = "n" > row< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span >
< span class = "c1" > # 3) existing result is cost(b[:b_index+1], a[index])< / span >
< span class = "n" > insert_delete< / span > < span class = "o" > =< / span > < span class = "nb" > min< / span > < span class = "p" > (< / span > < span class = "n" > result< / span > < span class = "p" > ,< / span > < span class = "n" > distance< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "n" > _MOVE_COST< / span >
< span class = "n" > result< / span > < span class = "o" > =< / span > < span class = "nb" > min< / span > < span class = "p" > (< / span > < span class = "n" > insert_delete< / span > < span class = "p" > ,< / span > < span class = "n" > substitute< / span > < span class = "p" > )< / span >
< span class = "c1" > # cost(b[:b_index+1], a[:index+1])< / span >
< span class = "n" > row< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > result< / span >
< span class = "k" > if< / span > < span class = "n" > result< / span > < span class = "o" > < < / span > < span class = "n" > minimum< / span > < span class = "p" > :< / span >
< span class = "n" > minimum< / span > < span class = "o" > =< / span > < span class = "n" > result< / span >
< span class = "k" > if< / span > < span class = "n" > minimum< / span > < span class = "o" > > < / span > < span class = "n" > max_cost< / span > < span class = "p" > :< / span >
< span class = "c1" > # Everything in this row is too big, so bail early.< / span >
< span class = "k" > return< / span > < span class = "n" > max_cost< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "k" > return< / span > < span class = "n" > result< / span >
< / pre > < / div >
< div class = "clearer" > < / div >
< / div >
< / div >
< / div >
< div class = "sphinxsidebar" role = "navigation" aria-label = "Main" >
< div class = "sphinxsidebarwrapper" >
< p class = "logo" > < a href = "../index.html" >
< img class = "logo" src = "../_static/evennia_logo.png" alt = "Logo of Evennia" / >
< / a > < / p >
< search id = "searchbox" style = "display: none" role = "search" >
< h3 id = "searchlabel" > Quick search< / h3 >
< div class = "searchformwrapper" >
< form class = "search" action = "../search.html" method = "get" >
< input type = "text" name = "q" aria-labelledby = "searchlabel" autocomplete = "off" autocorrect = "off" autocapitalize = "off" spellcheck = "false" / >
< input type = "submit" value = "Go" / >
< / form >
< / div >
< / search >
< script > document . getElementById ( 'searchbox' ) . style . display = "block" < / script > < h3 > Links< / h3 >
< ul >
< li > < a href = "https://www.evennia.com/docs/latest/index.html" > Documentation Top< / a > < / li >
< li > < a href = "https://www.evennia.com" > Evennia Home< / a > < / li >
< li > < a href = "https://github.com/evennia/evennia" > Github< / a > < / li >
< li > < a href = "http://games.evennia.com" > Game Index< / a > < / li >
< li >
< a href = "https://discord.gg/AJJpcRUhtF" > Discord< / a > -
< a href = "https://github.com/evennia/evennia/discussions" > Discussions< / a > -
< a href = "https://evennia.blogspot.com/" > Blog< / a >
< / li >
< / ul >
< h3 > Doc Versions< / h3 >
< ul >
< li >
< a href = "https://www.evennia.com/docs/latest/index.html" > latest (main branch)< / a >
< / li >
< li >
< a href = "https://www.evennia.com/docs/5.x/index.html" > v5.0.0 branch (outdated)< / a >
< / li >
< li >
< a href = "https://www.evennia.com/docs/4.x/index.html" > v4.0.0 branch (outdated)< / a >
< / li >
< li >
< a href = "https://www.evennia.com/docs/3.x/index.html" > v3.0.0 branch (outdated)< / a >
< / li >
< li >
< a href = "https://www.evennia.com/docs/2.x/index.html" > v2.0.0 branch (outdated)< / a >
< / li >
< li >
< a href = "https://www.evennia.com/docs/1.x/index.html" > v1.0.0 branch (outdated)< / a >
< / li >
< li >
< a href = "https://www.evennia.com/docs/0.x/index.html" > v0.9.5 branch (outdated)< / a >
< / li >
< / ul >
< / div >
< / div >
< div class = "clearer" > < / div >
< / div >
< div class = "related" role = "navigation" aria-label = "Related" >
< h3 > Navigation< / h3 >
< ul >
< li class = "right" style = "margin-right: 10px" >
< a href = "../genindex.html" title = "General Index"
>index< / a > < / li >
< li class = "right" >
< a href = "../py-modindex.html" title = "Python Module Index"
>modules< / a > |< / li >
< li class = "nav-item nav-item-0" > < a href = "../index.html" > Evennia< / a > » < / li >
< li class = "nav-item nav-item-1" > < a href = "index.html" > Module code< / a > » < / li >
< li class = "nav-item nav-item-this" > < a href = "" > traceback< / a > < / li >
< / ul >
< / div >
< div class = "footer" role = "contentinfo" >
© Copyright 2024, The Evennia developer community.
Created using < a href = "https://www.sphinx-doc.org/" > Sphinx< / a > 8.2.3.
< / div >
< / body >
< / html >