Fred Drake | 431f0ce | 1999-05-13 18:38:11 +0000 | [diff] [blame] | 1 | \chapter{Execution model \label{execmodel}} |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 2 | \index{execution model} |
| 3 | |
Fred Drake | 2829f1c | 2001-06-23 05:27:20 +0000 | [diff] [blame] | 4 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 5 | \section{Naming and binding \label{naming}} |
| 6 | \indexii{code}{block} |
Guido van Rossum | b18a93b | 1998-07-23 19:36:00 +0000 | [diff] [blame] | 7 | \index{namespace} |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 8 | \index{scope} |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 9 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 10 | \dfn{Names}\index{name} refer to objects. Names are introduced by |
| 11 | name binding operations. Each occurrence of a name in the program |
| 12 | text refers to the \dfn{binding}\indexii{binding}{name} of that name |
| 13 | established in the innermost function block containing the use. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 14 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 15 | A \dfn{block}\index{block} is a piece of Python program text that is |
| 16 | executed as a unit. The following are blocks: a module, a function |
| 17 | body, and a class definition. Each command typed interactively is a |
| 18 | block. A script file (a file given as standard input to the |
| 19 | interpreter or specified on the interpreter command line the first |
| 20 | argument) is a code block. A script command (a command specified on |
| 21 | the interpreter command line with the `\strong{-c}' option) is a code |
| 22 | block. The file read by the built-in function \function{execfile()} |
| 23 | is a code block. The string argument passed to the built-in function |
| 24 | \function{eval()} and to the \keyword{exec} statement is a code block. |
| 25 | The expression read and evaluated by the built-in function |
| 26 | \function{input()} is a code block. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 27 | |
Jeremy Hylton | e604875 | 2002-04-01 21:33:55 +0000 | [diff] [blame] | 28 | A code block is executed in an \dfn{execution |
| 29 | frame}\indexii{execution}{frame}. A frame contains some |
| 30 | administrative information (used for debugging) and determines where |
| 31 | and how execution continues after the code block's execution has |
| 32 | completed. |
| 33 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 34 | A \dfn{scope}\index{scope} defines the visibility of a name within a |
Fred Drake | 292724d | 2002-06-26 21:52:26 +0000 | [diff] [blame] | 35 | block. If a local variable is defined in a block, its scope includes |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 36 | that block. If the definition occurs in a function block, the scope |
| 37 | extends to any blocks contained within the defining one, unless a |
| 38 | contained block introduces a different binding for the name. The |
| 39 | scope of names defined in a class block is limited to the class block; |
| 40 | it does not extend to the code blocks of methods. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 41 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 42 | When a name is used in a code block, it is resolved using the nearest |
| 43 | enclosing scope. The set of all such scopes visible to a code block |
| 44 | is called the block's \dfn{environment}\index{environment}. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 45 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 46 | If a name is bound in a block, it is a local variable of that block. |
| 47 | If a name is bound at the module level, it is a global variable. (The |
| 48 | variables of the module code block are local and global.) If a |
| 49 | variable is used in a code block but not defined there, it is a |
| 50 | \dfn{free variable}\indexii{free}{variable}. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 51 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 52 | When a name is not found at all, a |
| 53 | \exception{NameError}\withsubitem{(built-in |
| 54 | exception)}{\ttindex{NameError}} exception is raised. If the name |
| 55 | refers to a local variable that has not been bound, a |
| 56 | \exception{UnboundLocalError}\ttindex{UnboundLocalError} exception is |
| 57 | raised. \exception{UnboundLocalError} is a subclass of |
| 58 | \exception{NameError}. |
| 59 | |
| 60 | The following constructs bind names: formal parameters to functions, |
Guido van Rossum | b18a93b | 1998-07-23 19:36:00 +0000 | [diff] [blame] | 61 | \keyword{import} statements, class and function definitions (these |
| 62 | bind the class or function name in the defining block), and targets |
| 63 | that are identifiers if occurring in an assignment, \keyword{for} loop |
| 64 | header, or in the second position of an \keyword{except} clause |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 65 | header. The \keyword{import} statement of the form ``\samp{from |
| 66 | \ldots import *}''\stindex{from} binds all names defined in the |
| 67 | imported module, except those beginning with an underscore. This form |
| 68 | may only be used at the module level. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 69 | |
| 70 | A target occurring in a \keyword{del} statement is also considered bound |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 71 | for this purpose (though the actual semantics are to unbind the |
| 72 | name). It is illegal to unbind a name that is referenced by an |
| 73 | enclosing scope; the compiler will report a \exception{SyntaxError}. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 74 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 75 | Each assignment or import statement occurs within a block defined by a |
| 76 | class or function definition or at the module level (the top-level |
| 77 | code block). |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 78 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 79 | If a name binding operation occurs anywhere within a code block, all |
| 80 | uses of the name within the block are treated as references to the |
| 81 | current block. This can lead to errors when a name is used within a |
| 82 | block before it is bound. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 83 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 84 | The previous rule is a subtle. Python lacks declarations and allows |
| 85 | name binding operations to occur anywhere within a code block. The |
| 86 | local variables of a code block can be determined by scanning the |
| 87 | entire text of the block for name binding operations. |
Jeremy Hylton | e702481 | 2001-03-23 14:05:16 +0000 | [diff] [blame] | 88 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 89 | If the global statement occurs within a block, all uses of the name |
| 90 | specified in the statement refer to the binding of that name in the |
| 91 | top-level namespace. Names are resolved in the top-level namespace by |
| 92 | searching the global namespace, i.e. the namespace of the module |
| 93 | containing the code block, and the builtin namespace, the namespace of |
| 94 | the module \module{__builtin__}. The global namespace is searched |
| 95 | first. If the name is not found there, the builtin namespace is |
| 96 | searched. The global statement must precede all uses of the name. |
Jeremy Hylton | e702481 | 2001-03-23 14:05:16 +0000 | [diff] [blame] | 97 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 98 | The built-in namespace associated with the execution of a code block |
| 99 | is actually found by looking up the name \code{__builtins__} in its |
| 100 | global namespace; this should be a dictionary or a module (in the |
| 101 | latter case the module's dictionary is used). Normally, the |
| 102 | \code{__builtins__} namespace is the dictionary of the built-in module |
| 103 | \module{__builtin__} (note: no `s'). If it isn't, restricted |
| 104 | execution\indexii{restricted}{execution} mode is in effect. |
Jeremy Hylton | e702481 | 2001-03-23 14:05:16 +0000 | [diff] [blame] | 105 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 106 | The namespace for a module is automatically created the first time a |
| 107 | module is imported. The main module for a script is always called |
| 108 | \module{__main__}\refbimodindex{__main__}. |
Jeremy Hylton | e702481 | 2001-03-23 14:05:16 +0000 | [diff] [blame] | 109 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 110 | The global statement has the same scope as a name binding operation |
| 111 | in the same block. If the nearest enclosing scope for a free variable |
| 112 | contains a global statement, the free variable is treated as a global. |
Jeremy Hylton | e702481 | 2001-03-23 14:05:16 +0000 | [diff] [blame] | 113 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 114 | A class definition is an executable statement that may use and define |
| 115 | names. These references follow the normal rules for name resolution. |
| 116 | The namespace of the class definition becomes the attribute dictionary |
| 117 | of the class. Names defined at the class scope are not visible in |
| 118 | methods. |
Jeremy Hylton | e702481 | 2001-03-23 14:05:16 +0000 | [diff] [blame] | 119 | |
Jeremy Hylton | e7d5773 | 2002-04-01 20:38:01 +0000 | [diff] [blame] | 120 | \subsection{Interaction with dynamic features \label{dynamic-features}} |
| 121 | |
| 122 | There are several cases where Python statements are illegal when |
| 123 | used in conjunction with nested scopes that contain free |
| 124 | variables. |
| 125 | |
| 126 | If a variable is referenced in an enclosing scope, it is illegal |
| 127 | to delete the name. An error will be reported at compile time. |
| 128 | |
| 129 | If the wild card form of import --- \samp{import *} --- is used in a |
| 130 | function and the function contains or is a nested block with free |
| 131 | variables, the compiler will raise a SyntaxError. |
| 132 | |
| 133 | If \keyword{exec} is used in a function and the function contains or |
| 134 | is a nested block with free variables, the compiler will raise a |
| 135 | \exception{SyntaxError} unless the exec explicitly specifies the local |
| 136 | namespace for the \keyword{exec}. (In other words, \samp{exec obj} |
| 137 | would be illegal, but \samp{exec obj in ns} would be legal.) |
| 138 | |
| 139 | The \function{eval()}, \function{execfile()}, and \function{input()} |
| 140 | functions and the \keyword{exec} statement do not have access to the |
| 141 | full environment for resolving names. Names may be resolved in the |
| 142 | local and global namespaces of the caller. Free variables are not |
| 143 | resolved in the nearest enclosing namespace, but in the global |
| 144 | namespace.\footnote{This limitation occurs because the code that is |
| 145 | executed by these operations is not available at the time the |
| 146 | module is compiled.} |
| 147 | The \keyword{exec} statement and the \function{eval()} and |
Guido van Rossum | b18a93b | 1998-07-23 19:36:00 +0000 | [diff] [blame] | 148 | \function{execfile()} functions have optional arguments to override |
| 149 | the global and local namespace. If only one namespace is specified, |
| 150 | it is used for both. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 151 | |
Fred Drake | 431f0ce | 1999-05-13 18:38:11 +0000 | [diff] [blame] | 152 | \section{Exceptions \label{exceptions}} |
| 153 | \index{exception} |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 154 | |
| 155 | Exceptions are a means of breaking out of the normal flow of control |
| 156 | of a code block in order to handle errors or other exceptional |
Fred Drake | 431f0ce | 1999-05-13 18:38:11 +0000 | [diff] [blame] | 157 | conditions. An exception is |
| 158 | \emph{raised}\index{raise an exception} at the point where the error |
| 159 | is detected; it may be \emph{handled}\index{handle an exception} by |
| 160 | the surrounding code block or by any code block that directly or |
| 161 | indirectly invoked the code block where the error occurred. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 162 | \index{exception handler} |
| 163 | \index{errors} |
| 164 | \index{error handling} |
| 165 | |
Guido van Rossum | b18a93b | 1998-07-23 19:36:00 +0000 | [diff] [blame] | 166 | The Python interpreter raises an exception when it detects a run-time |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 167 | error (such as division by zero). A Python program can also |
| 168 | explicitly raise an exception with the \keyword{raise} statement. |
| 169 | Exception handlers are specified with the \keyword{try} ... \keyword{except} |
Guido van Rossum | b18a93b | 1998-07-23 19:36:00 +0000 | [diff] [blame] | 170 | statement. The \keyword{try} ... \keyword{finally} statement |
| 171 | specifies cleanup code which does not handle the exception, but is |
| 172 | executed whether an exception occurred or not in the preceding code. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 173 | |
Fred Drake | 70b3831 | 2002-04-17 03:41:50 +0000 | [diff] [blame] | 174 | Python uses the ``termination''\index{termination model} model of |
Fred Drake | e15956b | 2000-04-03 04:51:13 +0000 | [diff] [blame] | 175 | error handling: an exception handler can find out what happened and |
| 176 | continue execution at an outer level, but it cannot repair the cause |
| 177 | of the error and retry the failing operation (except by re-entering |
| 178 | the offending piece of code from the top). |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 179 | |
| 180 | When an exception is not handled at all, the interpreter terminates |
Guido van Rossum | b18a93b | 1998-07-23 19:36:00 +0000 | [diff] [blame] | 181 | execution of the program, or returns to its interactive main loop. In |
| 182 | either case, it prints a stack backtrace, except when the exception is |
Fred Drake | 431f0ce | 1999-05-13 18:38:11 +0000 | [diff] [blame] | 183 | \exception{SystemExit}\withsubitem{(built-in |
| 184 | exception)}{\ttindex{SystemExit}}. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 185 | |
Guido van Rossum | b18a93b | 1998-07-23 19:36:00 +0000 | [diff] [blame] | 186 | Exceptions are identified by string objects or class instances. |
| 187 | Selection of a matching except clause is based on object identity |
| 188 | (i.e., two different string objects with the same value represent |
| 189 | different exceptions!) For string exceptions, the \keyword{except} |
| 190 | clause must reference the same string object. For class exceptions, |
| 191 | the \keyword{except} clause must reference the same class or a base |
| 192 | class of it. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 193 | |
| 194 | When an exception is raised, an object (maybe \code{None}) is passed |
Fred Drake | 81932e2 | 2002-06-20 20:55:29 +0000 | [diff] [blame] | 195 | as the exception's \emph{value}; this object does not affect the |
| 196 | selection of an exception handler, but is passed to the selected |
| 197 | exception handler as additional information. For class exceptions, |
| 198 | this object must be an instance of the exception class being raised. |
Fred Drake | f666917 | 1998-05-06 19:52:49 +0000 | [diff] [blame] | 199 | |
Skip Montanaro | ee113f0 | 2002-08-28 01:14:57 +0000 | [diff] [blame^] | 200 | \begin{notice}[warning] |
| 201 | Messages to exceptions are not part of the Python API. Their contents may |
| 202 | change from one version of Python to the next without warning and should not |
| 203 | be relied on by code which will run under multiple versions of the |
| 204 | interpreter. |
| 205 | \end{notice} |
| 206 | |
Fred Drake | e15956b | 2000-04-03 04:51:13 +0000 | [diff] [blame] | 207 | See also the description of the \keyword{try} statement in section |
| 208 | \ref{try} and \keyword{raise} statement in section \ref{raise}. |