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