| 
									
										
										
										
											1998-08-10 19:42:37 +00:00
										 |  |  | \section{\module{traceback} --- | 
					
						
							| 
									
										
										
										
											1999-06-29 17:08:41 +00:00
										 |  |  |          Print or retrieve a stack traceback} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-06-29 17:08:41 +00:00
										 |  |  | \declaremodule{standard}{traceback} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | \modulesynopsis{Print or retrieve a stack traceback.} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | This module provides a standard interface to extract, format and print | 
					
						
							|  |  |  | stack traces of Python programs.  It exactly mimics the behavior of | 
					
						
							|  |  |  | the Python interpreter when it prints a stack trace.  This is useful | 
					
						
							|  |  |  | when you want to print stack traces under program control, e.g. in a | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | ``wrapper'' around the interpreter. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The module uses traceback objects --- this is the object type | 
					
						
							|  |  |  | that is stored in the variables \code{sys.exc_traceback} and | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | \code{sys.last_traceback} and returned as the third item from | 
					
						
							|  |  |  | \function{sys.exc_info()}. | 
					
						
							| 
									
										
										
										
											1998-03-08 06:12:10 +00:00
										 |  |  | \obindex{traceback} | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The module defines the following functions: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | \begin{funcdesc}{print_tb}{traceback\optional{, limit\optional{, file}}} | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | Print up to \var{limit} stack trace entries from \var{traceback}.  If | 
					
						
							|  |  |  | \var{limit} is omitted or \code{None}, all entries are printed. | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | If \var{file} is omitted or \code{None}, the output goes to | 
					
						
							|  |  |  | \code{sys.stderr}; otherwise it should be an open file or file-like | 
					
						
							|  |  |  | object to receive the output. | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-26 18:51:21 +00:00
										 |  |  | \begin{funcdesc}{print_exception}{type, value, traceback\optional{, | 
					
						
							|  |  |  |                                   limit\optional{, file}}} | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | Print exception information and up to \var{limit} stack trace entries | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | from \var{traceback} to \var{file}. | 
					
						
							|  |  |  | This differs from \function{print_tb()} in the | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | following ways: (1) if \var{traceback} is not \code{None}, it prints a | 
					
						
							| 
									
										
										
										
											1998-03-08 06:12:10 +00:00
										 |  |  | header \samp{Traceback (innermost last):}; (2) it prints the | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | exception \var{type} and \var{value} after the stack trace; (3) if | 
					
						
							| 
									
										
										
										
											1998-03-08 06:12:10 +00:00
										 |  |  | \var{type} is \exception{SyntaxError} and \var{value} has the appropriate | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | format, it prints the line where the syntax error occurred with a | 
					
						
							| 
									
										
										
										
											1998-03-08 06:12:10 +00:00
										 |  |  | caret indicating the approximate position of the error. | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | \begin{funcdesc}{print_exc}{\optional{limit\optional{, file}}} | 
					
						
							| 
									
										
										
										
											1998-03-08 06:12:10 +00:00
										 |  |  | This is a shorthand for `\code{print_exception(sys.exc_type,} | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | \code{sys.exc_value,} \code{sys.exc_traceback,} \var{limit}\code{,} | 
					
						
							|  |  |  | \var{file}\code{)}'.  (In fact, it uses \code{sys.exc_info()} to | 
					
						
							|  |  |  | retrieve the same information in a thread-safe way.) | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | \begin{funcdesc}{print_last}{\optional{limit\optional{, file}}} | 
					
						
							| 
									
										
										
										
											1998-03-08 06:12:10 +00:00
										 |  |  | This is a shorthand for `\code{print_exception(sys.last_type,} | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | \code{sys.last_value,} \code{sys.last_traceback,} \var{limit}\code{,} | 
					
						
							|  |  |  | \var{file}\code{)}'. | 
					
						
							| 
									
										
										
										
											1995-03-01 14:36:00 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{print_stack}{\optional{f\optional{, limit\optional{, file}}}} | 
					
						
							|  |  |  | This function prints a stack trace from its invocation point.  The | 
					
						
							|  |  |  | optional \var{f} argument can be used to specify an alternate stack | 
					
						
							|  |  |  | frame to start.  The optional \var{limit} and \var{file} arguments have the | 
					
						
							|  |  |  | same meaning as for \function{print_exception()}. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-26 18:51:21 +00:00
										 |  |  | \begin{funcdesc}{extract_tb}{traceback\optional{, limit}} | 
					
						
							|  |  |  | Return a list of up to \var{limit} ``pre-processed'' stack trace | 
					
						
							|  |  |  | entries extracted from the traceback object \var{traceback}.  It is | 
					
						
							|  |  |  | useful for alternate formatting of stack traces.  If \var{limit} is | 
					
						
							|  |  |  | omitted or \code{None}, all entries are extracted.  A | 
					
						
							|  |  |  | ``pre-processed'' stack trace entry is a quadruple (\var{filename}, | 
					
						
							|  |  |  | \var{line number}, \var{function name}, \var{text}) representing | 
					
						
							|  |  |  | the information that is usually printed for a stack trace.  The | 
					
						
							|  |  |  | \var{text} is a string with leading and trailing whitespace | 
					
						
							|  |  |  | stripped; if the source is not available it is \code{None}. | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{extract_stack}{\optional{f\optional{, limit}}} | 
					
						
							|  |  |  | Extract the raw traceback from the current stack frame.  The return | 
					
						
							|  |  |  | value has the same format as for \function{extract_tb()}.  The | 
					
						
							|  |  |  | optional \var{f} and \var{limit} arguments have the same meaning as | 
					
						
							|  |  |  | for \function{print_stack()}. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{format_list}{list} | 
					
						
							|  |  |  | Given a list of tuples as returned by \function{extract_tb()} or | 
					
						
							|  |  |  | \function{extract_stack()}, return a list of strings ready for | 
					
						
							|  |  |  | printing.  Each string in the resulting list corresponds to the item | 
					
						
							|  |  |  | with the same index in the argument list.  Each string ends in a | 
					
						
							|  |  |  | newline; the strings may contain internal newlines as well, for those | 
					
						
							|  |  |  | items whose source text line is not \code{None}. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{format_exception_only}{type, value} | 
					
						
							|  |  |  | Format the exception part of a traceback.  The arguments are the | 
					
						
							|  |  |  | exception type and value such as given by \code{sys.last_type} and | 
					
						
							|  |  |  | \code{sys.last_value}.  The return value is a list of strings, each | 
					
						
							|  |  |  | ending in a newline.  Normally, the list contains a single string; | 
					
						
							|  |  |  | however, for \code{SyntaxError} exceptions, it contains several lines | 
					
						
							|  |  |  | that (when printed) display detailed information about where the | 
					
						
							|  |  |  | syntax error occurred.  The message indicating which exception | 
					
						
							|  |  |  | occurred is the always last string in the list. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{format_exception}{type, value, tb\optional{, limit}} | 
					
						
							|  |  |  | Format a stack trace and the exception information.  The arguments  | 
					
						
							|  |  |  | have the same meaning as the corresponding arguments to | 
					
						
							|  |  |  | \function{print_exception()}.  The return value is a list of strings, | 
					
						
							|  |  |  | each ending in a newline and some containing internal newlines.  When | 
					
						
							| 
									
										
										
										
											2000-07-16 19:01:10 +00:00
										 |  |  | these lines are concatenated and printed, exactly the same text is | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | printed as does \function{print_exception()}. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{format_tb}{tb\optional{, limit}} | 
					
						
							|  |  |  | A shorthand for \code{format_list(extract_tb(\var{tb}, \var{limit}))}. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{format_stack}{\optional{f\optional{, limit}}} | 
					
						
							|  |  |  | A shorthand for \code{format_list(extract_stack(\var{f}, \var{limit}))}. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{tb_lineno}{tb} | 
					
						
							|  |  |  | This function returns the current line number set in the traceback | 
					
						
							|  |  |  | object.  This is normally the same as the \code{\var{tb}.tb_lineno} | 
					
						
							|  |  |  | field of the object, but when optimization is used (the -O flag) this | 
					
						
							|  |  |  | field is not updated correctly; this function calculates the correct | 
					
						
							|  |  |  | value. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-06-29 17:08:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \subsection{Traceback Example \label{traceback-example}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This simple example implements a basic read-eval-print loop, similar | 
					
						
							|  |  |  | to (but less useful than) the standard Python interactive interpreter | 
					
						
							|  |  |  | loop.  For a more complete implementation of the interpreter loop, | 
					
						
							|  |  |  | refer to the \refmodule{code} module. | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | import sys, traceback | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def run_user_code(envdir): | 
					
						
							|  |  |  |     source = raw_input(">>> ") | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         exec source in envdir | 
					
						
							|  |  |  |     except: | 
					
						
							|  |  |  |         print "Exception in user code:" | 
					
						
							| 
									
										
										
										
											1998-06-17 22:38:09 +00:00
										 |  |  |         print '-'*60 | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  |         traceback.print_exc(file=sys.stdout) | 
					
						
							| 
									
										
										
										
											1998-06-17 22:38:09 +00:00
										 |  |  |         print '-'*60 | 
					
						
							| 
									
										
										
										
											1998-06-17 22:37:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | envdir = {} | 
					
						
							|  |  |  | while 1: | 
					
						
							|  |  |  |     run_user_code(envdir) | 
					
						
							|  |  |  | \end{verbatim} |