blob: e2a7e07262d38e90842072f2601991fd34a97e8f [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{traceback} ---
2 Print or retrieve a stack traceback.}
Fred Drakeb91e9341998-07-23 17:59:49 +00003\declaremodule{standard}{traceback}
4
5\modulesynopsis{Print or retrieve a stack traceback.}
6
Guido van Rossum81b30601995-03-01 14:36:00 +00007
Guido van Rossum81b30601995-03-01 14:36:00 +00008
Guido van Rossumbca12071998-06-17 22:37:26 +00009This module provides a standard interface to extract, format and print
10stack traces of Python programs. It exactly mimics the behavior of
11the Python interpreter when it prints a stack trace. This is useful
12when you want to print stack traces under program control, e.g. in a
Guido van Rossum81b30601995-03-01 14:36:00 +000013``wrapper'' around the interpreter.
14
15The module uses traceback objects --- this is the object type
16that is stored in the variables \code{sys.exc_traceback} and
Guido van Rossumbca12071998-06-17 22:37:26 +000017\code{sys.last_traceback} and returned as the third item from
18\function{sys.exc_info()}.
Fred Drake266b4c11998-03-08 06:12:10 +000019\obindex{traceback}
Guido van Rossum81b30601995-03-01 14:36:00 +000020
21The module defines the following functions:
22
Guido van Rossumbca12071998-06-17 22:37:26 +000023\begin{funcdesc}{print_tb}{traceback\optional{, limit\optional{, file}}}
Guido van Rossum81b30601995-03-01 14:36:00 +000024Print up to \var{limit} stack trace entries from \var{traceback}. If
25\var{limit} is omitted or \code{None}, all entries are printed.
Guido van Rossumbca12071998-06-17 22:37:26 +000026If \var{file} is omitted or \code{None}, the output goes to
27\code{sys.stderr}; otherwise it should be an open file or file-like
28object to receive the output.
Guido van Rossum81b30601995-03-01 14:36:00 +000029\end{funcdesc}
30
Fred Drake266b4c11998-03-08 06:12:10 +000031\begin{funcdesc}{extract_tb}{traceback\optional{, limit}}
Guido van Rossum81b30601995-03-01 14:36:00 +000032Return a list of up to \var{limit} ``pre-processed'' stack trace
33entries extracted from \var{traceback}. It is useful for alternate
34formatting of stack traces. If \var{limit} is omitted or \code{None},
35all entries are extracted. A ``pre-processed'' stack trace entry is a
36quadruple (\var{filename}, \var{line number}, \var{function name},
37\var{line text}) representing the information that is usually printed
38for a stack trace. The \var{line text} is a string with leading and
39trailing whitespace stripped; if the source is not available it is
40\code{None}.
41\end{funcdesc}
42
Guido van Rossumbca12071998-06-17 22:37:26 +000043\begin{funcdesc}{print_exception}{type, value,
44traceback\optional{, limit\optional{, file}}}
Guido van Rossum81b30601995-03-01 14:36:00 +000045Print exception information and up to \var{limit} stack trace entries
Guido van Rossumbca12071998-06-17 22:37:26 +000046from \var{traceback} to \var{file}.
47This differs from \function{print_tb()} in the
Guido van Rossum81b30601995-03-01 14:36:00 +000048following ways: (1) if \var{traceback} is not \code{None}, it prints a
Fred Drake266b4c11998-03-08 06:12:10 +000049header \samp{Traceback (innermost last):}; (2) it prints the
Guido van Rossum81b30601995-03-01 14:36:00 +000050exception \var{type} and \var{value} after the stack trace; (3) if
Fred Drake266b4c11998-03-08 06:12:10 +000051\var{type} is \exception{SyntaxError} and \var{value} has the appropriate
Guido van Rossum81b30601995-03-01 14:36:00 +000052format, it prints the line where the syntax error occurred with a
Fred Drake266b4c11998-03-08 06:12:10 +000053caret indicating the approximate position of the error.
Guido van Rossum81b30601995-03-01 14:36:00 +000054\end{funcdesc}
55
Guido van Rossumbca12071998-06-17 22:37:26 +000056\begin{funcdesc}{print_exc}{\optional{limit\optional{, file}}}
Fred Drake266b4c11998-03-08 06:12:10 +000057This is a shorthand for `\code{print_exception(sys.exc_type,}
Guido van Rossumbca12071998-06-17 22:37:26 +000058\code{sys.exc_value,} \code{sys.exc_traceback,} \var{limit}\code{,}
59\var{file}\code{)}'. (In fact, it uses \code{sys.exc_info()} to
60retrieve the same information in a thread-safe way.)
Guido van Rossum81b30601995-03-01 14:36:00 +000061\end{funcdesc}
62
Guido van Rossumbca12071998-06-17 22:37:26 +000063\begin{funcdesc}{print_last}{\optional{limit\optional{, file}}}
Fred Drake266b4c11998-03-08 06:12:10 +000064This is a shorthand for `\code{print_exception(sys.last_type,}
Guido van Rossumbca12071998-06-17 22:37:26 +000065\code{sys.last_value,} \code{sys.last_traceback,} \var{limit}\code{,}
66\var{file}\code{)}'.
Guido van Rossum81b30601995-03-01 14:36:00 +000067\end{funcdesc}
Guido van Rossumbca12071998-06-17 22:37:26 +000068
69\begin{funcdesc}{print_stack}{\optional{f\optional{, limit\optional{, file}}}}
70This function prints a stack trace from its invocation point. The
71optional \var{f} argument can be used to specify an alternate stack
72frame to start. The optional \var{limit} and \var{file} arguments have the
73same meaning as for \function{print_exception()}.
74\end{funcdesc}
75
76\begin{funcdesc}{extract_tb}{tb\optional{, limit}}
77Return a list containing the raw (unformatted) traceback information
78extracted from the traceback object \var{tb}. The optional
79\var{limit} argument has the same meaning as for
80\function{print_exception()}. The items in the returned list are
814-tuples containing the following values: filename, line number,
82function name, and source text line. The source text line is stripped
83of leading and trailing whitespace; it is \code{None} when the source
84text file is unavailable.
85\end{funcdesc}
86
87\begin{funcdesc}{extract_stack}{\optional{f\optional{, limit}}}
88Extract the raw traceback from the current stack frame. The return
89value has the same format as for \function{extract_tb()}. The
90optional \var{f} and \var{limit} arguments have the same meaning as
91for \function{print_stack()}.
92\end{funcdesc}
93
94\begin{funcdesc}{format_list}{list}
95Given a list of tuples as returned by \function{extract_tb()} or
96\function{extract_stack()}, return a list of strings ready for
97printing. Each string in the resulting list corresponds to the item
98with the same index in the argument list. Each string ends in a
99newline; the strings may contain internal newlines as well, for those
100items whose source text line is not \code{None}.
101\end{funcdesc}
102
103\begin{funcdesc}{format_exception_only}{type, value}
104Format the exception part of a traceback. The arguments are the
105exception type and value such as given by \code{sys.last_type} and
106\code{sys.last_value}. The return value is a list of strings, each
107ending in a newline. Normally, the list contains a single string;
108however, for \code{SyntaxError} exceptions, it contains several lines
109that (when printed) display detailed information about where the
110syntax error occurred. The message indicating which exception
111occurred is the always last string in the list.
112\end{funcdesc}
113
114\begin{funcdesc}{format_exception}{type, value, tb\optional{, limit}}
115Format a stack trace and the exception information. The arguments
116have the same meaning as the corresponding arguments to
117\function{print_exception()}. The return value is a list of strings,
118each ending in a newline and some containing internal newlines. When
119these lines are contatenated and printed, exactly the same text is
120printed as does \function{print_exception()}.
121\end{funcdesc}
122
123\begin{funcdesc}{format_tb}{tb\optional{, limit}}
124A shorthand for \code{format_list(extract_tb(\var{tb}, \var{limit}))}.
125\end{funcdesc}
126
127\begin{funcdesc}{format_stack}{\optional{f\optional{, limit}}}
128A shorthand for \code{format_list(extract_stack(\var{f}, \var{limit}))}.
129\end{funcdesc}
130
131\begin{funcdesc}{tb_lineno}{tb}
132This function returns the current line number set in the traceback
133object. This is normally the same as the \code{\var{tb}.tb_lineno}
134field of the object, but when optimization is used (the -O flag) this
135field is not updated correctly; this function calculates the correct
136value.
137\end{funcdesc}
138
139A simple example follows:
140
141\begin{verbatim}
142import sys, traceback
143
144def run_user_code(envdir):
145 source = raw_input(">>> ")
146 try:
147 exec source in envdir
148 except:
149 print "Exception in user code:"
Guido van Rossumfaac0131998-06-17 22:38:09 +0000150 print '-'*60
Guido van Rossumbca12071998-06-17 22:37:26 +0000151 traceback.print_exc(file=sys.stdout)
Guido van Rossumfaac0131998-06-17 22:38:09 +0000152 print '-'*60
Guido van Rossumbca12071998-06-17 22:37:26 +0000153
154envdir = {}
155while 1:
156 run_user_code(envdir)
157\end{verbatim}