diff options
Diffstat (limited to 'Doc/ref4.tex')
-rw-r--r-- | Doc/ref4.tex | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/Doc/ref4.tex b/Doc/ref4.tex new file mode 100644 index 0000000..f8677b5 --- /dev/null +++ b/Doc/ref4.tex @@ -0,0 +1,147 @@ +\chapter{Execution model} +\index{execution model} + +\section{Code blocks, execution frames, and name spaces} \label{execframes} +\index{code block} +\indexii{execution}{frame} +\index{name space} + +A {\em code block} is a piece of Python program text that can be +executed as a unit, such as a module, a class definition or a function +body. Some code blocks (like modules) are executed only once, others +(like function bodies) may be executed many times. Code block may +textually contain other code blocks. Code blocks may invoke other +code blocks (that may or may not be textually contained in them) as +part of their execution, e.g. by invoking (calling) a function. +\index{code block} +\indexii{code}{block} + +The following are code blocks: A module is a code block. A function +body is a code block. A class definition is a code block. Each +command typed interactively is a separate code block; a script file is +a code block. The string argument passed to the built-in functions +\verb\eval\ and \verb\exec\ are code blocks. And finally, the +expression read and evaluated by the built-in function \verb\input\ is +a code block. + +A code block is executed in an execution frame. An {\em execution +frame} contains some administrative information (used for debugging), +determines where and how execution continues after the code block's +execution has completed, and (perhaps most importantly) defines two +name spaces, the local and the global name space, that affect +execution of the code block. +\indexii{execution}{frame} + +A {\em name space} is a mapping from names (identifiers) to objects. +A particular name space may be referenced by more than one execution +frame, and from other places as well. Adding a name to a name space +is called {\em binding} a name (to an object); changing the mapping of +a name is called {\em rebinding}; removing a name is {\em unbinding}. +Name spaces are functionally equivalent to dictionaries. +\index{name space} +\indexii{binding}{name} +\indexii{rebinding}{name} +\indexii{unbinding}{name} + +The {\em local name space} of an execution frame determines the default +place where names are defined and searched. The {\em global name +space} determines the place where names listed in \verb\global\ +statements are defined and searched, and where names that are not +explicitly bound in the current code block are searched. +\indexii{local}{name space} +\indexii{global}{name space} +\stindex{global} + +Whether a name is local or global in a code block is determined by +static inspection of the source text for the code block: in the +absence of \verb\global\ statements, a name that is bound anywhere in +the code block is local in the entire code block; all other names are +considered global. The \verb\global\ statement forces global +interpretation of selected names throughout the code block. The +following constructs bind names: formal parameters, \verb\import\ +statements, class and function definitions (these bind the class or +function name), and targets that are identifiers if occurring in an +assignment, \verb\for\ loop header, or \verb\except\ clause header. +(A target occurring in a \verb\del\ statement does not bind a name.) + +When a global name is not found in the global name space, it is +searched in the list of ``built-in'' names (which is actually the +global name space of the module \verb\builtin\). When a name is not +found at all, the \verb\NameError\ exception is raised. + +The following table lists the meaning of the local and global name +space for various types of code blocks. The name space for a +particular module is automatically created when the module is first +referenced. + +\begin{center} +\begin{tabular}{|l|l|l|l|} +\hline +Code block type & Global name space & Local name space & Notes \\ +\hline +Module & n.s. for this module & same as global & \\ +Script & n.s. for \verb\__main__\ & same as global & \\ +Interactive command & n.s. for \verb\__main__\ & same as global & \\ +Class definition & global n.s. of containing block & new n.s. & \\ +Function body & global n.s. of containing block & new n.s. & \\ +String passed to \verb\exec\ or \verb\eval\ + & global n.s. of caller & local n.s. of caller & (1) \\ +File read by \verb\execfile\ + & global n.s. of caller & local n.s. of caller & (1) \\ +Expression read by \verb\input\ + & global n.s. of caller & local n.s. of caller & \\ +\hline +\end{tabular} +\end{center} + +Notes: + +\begin{description} + +\item[n.s.] means {\em name space} + +\item[(1)] The global and local name space for these functions can be +overridden with optional extra arguments. + +\end{description} + +\section{Exceptions} + +Exceptions are a means of breaking out of the normal flow of control +of a code block in order to handle errors or other exceptional +conditions. An exception is {\em raised} at the point where the error +is detected; it may be {\em handled} by the surrounding code block or +by any code block that directly or indirectly invoked the code block +where the error occurred. +\index{exception} +\index{raise an exception} +\index{handle an exception} +\index{exception handler} +\index{errors} +\index{error handling} + +The Python interpreter raises an exception when it detects an run-time +error (such as division by zero). A Python program can also +explicitly raise an exception with the \verb\raise\ statement. +Exception handlers are specified with the \verb\try...except\ +statement. + +Python uses the ``termination'' model of error handling: an exception +handler can find out what happened and continue execution at an outer +level, but it cannot repair the cause of the error and retry the +failing operation (except by re-entering the the offending piece of +code from the top). + +When an exception is not handled at all, the interpreter terminates +execution of the program, or returns to its interactive main loop. + +Exceptions are identified by string objects. Two different string +objects with the same value identify different exceptions. + +When an exception is raised, an object (maybe \verb\None\) is passed +as the exception's ``parameter''; this object does not affect the +selection of an exception handler, but is passed to the selected +exception handler as additional information. + +See also the description of the \verb\try\ and \verb\raise\ +statements. |