| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 1 | |
| 2 | .. _execmodel: |
| 3 | |
| 4 | *************** |
| 5 | Execution model |
| 6 | *************** |
| 7 | |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 8 | .. index:: |
| Nick Coghlan | 91e561a | 2015-08-05 23:07:24 +1000 | [diff] [blame] | 9 | single: execution model |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 10 | pair: code; block |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 11 | |
| Nick Coghlan | 91e561a | 2015-08-05 23:07:24 +1000 | [diff] [blame] | 12 | .. _prog_structure: |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 13 | |
| R David Murray | 51d3f8b | 2015-11-20 09:57:20 -0500 | [diff] [blame] | 14 | Structure of a program |
| 15 | ====================== |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 16 | |
| Georg Brandl | 96593ed | 2007-09-07 14:15:41 +0000 | [diff] [blame] | 17 | .. index:: block |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 18 | |
| Nick Coghlan | 91e561a | 2015-08-05 23:07:24 +1000 | [diff] [blame] | 19 | A Python program is constructed from code blocks. |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 20 | A :dfn:`block` is a piece of Python program text that is executed as a unit. |
| 21 | The following are blocks: a module, a function body, and a class definition. |
| 22 | Each command typed interactively is a block. A script file (a file given as |
| Raymond Hettinger | aa7886d | 2014-05-26 22:20:37 -0700 | [diff] [blame] | 23 | standard input to the interpreter or specified as a command line argument to the |
| 24 | interpreter) is a code block. A script command (a command specified on the |
| Julien Palard | a45b0ef | 2019-09-12 15:19:06 +0200 | [diff] [blame] | 25 | interpreter command line with the :option:`-c` option) is a code block. |
| 26 | A module run as a top level script (as module ``__main__``) from the command |
| 27 | line using a :option:`-m` argument is also a code block. The string |
| Raymond Hettinger | aa7886d | 2014-05-26 22:20:37 -0700 | [diff] [blame] | 28 | argument passed to the built-in functions :func:`eval` and :func:`exec` is a |
| 29 | code block. |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 30 | |
| 31 | .. index:: pair: execution; frame |
| 32 | |
| 33 | A code block is executed in an :dfn:`execution frame`. A frame contains some |
| 34 | administrative information (used for debugging) and determines where and how |
| 35 | execution continues after the code block's execution has completed. |
| 36 | |
| Nick Coghlan | 91e561a | 2015-08-05 23:07:24 +1000 | [diff] [blame] | 37 | .. _naming: |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 38 | |
| Nick Coghlan | 91e561a | 2015-08-05 23:07:24 +1000 | [diff] [blame] | 39 | Naming and binding |
| 40 | ================== |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 41 | |
| 42 | .. index:: |
| Nick Coghlan | 91e561a | 2015-08-05 23:07:24 +1000 | [diff] [blame] | 43 | single: namespace |
| 44 | single: scope |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 45 | |
| Nick Coghlan | 91e561a | 2015-08-05 23:07:24 +1000 | [diff] [blame] | 46 | .. _bind_names: |
| 47 | |
| 48 | Binding of names |
| 49 | ---------------- |
| 50 | |
| 51 | .. index:: |
| 52 | single: name |
| 53 | pair: binding; name |
| 54 | |
| 55 | :dfn:`Names` refer to objects. Names are introduced by name binding operations. |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 56 | |
| Serhiy Storchaka | ddb961d | 2018-10-26 09:00:49 +0300 | [diff] [blame] | 57 | .. index:: single: from; import statement |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 58 | |
| Miss Islington (bot) | 7842aed | 2021-11-25 21:36:37 -0800 | [diff] [blame] | 59 | The following constructs bind names: |
| 60 | |
| 61 | * formal parameters to functions, |
| 62 | * class definitions, |
| 63 | * function definitions, |
| 64 | * assignment expressions, |
| 65 | * :ref:`targets <assignment>` that are identifiers if occurring in |
| 66 | an assignment: |
| 67 | |
| 68 | + :keyword:`for` loop header, |
| 69 | + after :keyword:`!as` in a :keyword:`with` statement, :keyword:`except` |
| 70 | clause or in the as-pattern in structural pattern matching, |
| 71 | + in a capture pattern in structural pattern matching |
| 72 | |
| 73 | * :keyword:`import` statements. |
| 74 | |
| 75 | The :keyword:`!import` statement of the form ``from ... import *`` binds all |
| 76 | names defined in the imported module, except those beginning with an underscore. |
| 77 | This form may only be used at the module level. |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 78 | |
| 79 | A target occurring in a :keyword:`del` statement is also considered bound for |
| Benjamin Peterson | c6696d2 | 2011-02-26 21:32:16 +0000 | [diff] [blame] | 80 | this purpose (though the actual semantics are to unbind the name). |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 81 | |
| 82 | Each assignment or import statement occurs within a block defined by a class or |
| 83 | function definition or at the module level (the top-level code block). |
| 84 | |
| Nick Coghlan | 91e561a | 2015-08-05 23:07:24 +1000 | [diff] [blame] | 85 | .. index:: pair: free; variable |
| 86 | |
| 87 | If a name is bound in a block, it is a local variable of that block, unless |
| 88 | declared as :keyword:`nonlocal` or :keyword:`global`. If a name is bound at |
| 89 | the module level, it is a global variable. (The variables of the module code |
| 90 | block are local and global.) If a variable is used in a code block but not |
| 91 | defined there, it is a :dfn:`free variable`. |
| 92 | |
| 93 | Each occurrence of a name in the program text refers to the :dfn:`binding` of |
| 94 | that name established by the following name resolution rules. |
| 95 | |
| 96 | .. _resolve_names: |
| 97 | |
| 98 | Resolution of names |
| 99 | ------------------- |
| 100 | |
| 101 | .. index:: scope |
| 102 | |
| 103 | A :dfn:`scope` defines the visibility of a name within a block. If a local |
| 104 | variable is defined in a block, its scope includes that block. If the |
| 105 | definition occurs in a function block, the scope extends to any blocks contained |
| 106 | within the defining one, unless a contained block introduces a different binding |
| 107 | for the name. |
| 108 | |
| 109 | .. index:: single: environment |
| 110 | |
| 111 | When a name is used in a code block, it is resolved using the nearest enclosing |
| 112 | scope. The set of all such scopes visible to a code block is called the block's |
| 113 | :dfn:`environment`. |
| 114 | |
| 115 | .. index:: |
| 116 | single: NameError (built-in exception) |
| 117 | single: UnboundLocalError |
| 118 | |
| 119 | When a name is not found at all, a :exc:`NameError` exception is raised. |
| 120 | If the current scope is a function scope, and the name refers to a local |
| 121 | variable that has not yet been bound to a value at the point where the name is |
| 122 | used, an :exc:`UnboundLocalError` exception is raised. |
| 123 | :exc:`UnboundLocalError` is a subclass of :exc:`NameError`. |
| 124 | |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 125 | If a name binding operation occurs anywhere within a code block, all uses of the |
| 126 | name within the block are treated as references to the current block. This can |
| Georg Brandl | 96593ed | 2007-09-07 14:15:41 +0000 | [diff] [blame] | 127 | lead to errors when a name is used within a block before it is bound. This rule |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 128 | is subtle. Python lacks declarations and allows name binding operations to |
| 129 | occur anywhere within a code block. The local variables of a code block can be |
| 130 | determined by scanning the entire text of the block for name binding operations. |
| 131 | |
| Miss Islington (bot) | 855d624 | 2021-10-16 07:01:54 -0700 | [diff] [blame] | 132 | If the :keyword:`global` statement occurs within a block, all uses of the names |
| 133 | specified in the statement refer to the bindings of those names in the top-level |
| Georg Brandl | 96593ed | 2007-09-07 14:15:41 +0000 | [diff] [blame] | 134 | namespace. Names are resolved in the top-level namespace by searching the |
| 135 | global namespace, i.e. the namespace of the module containing the code block, |
| Georg Brandl | 22b3431 | 2009-07-26 14:54:51 +0000 | [diff] [blame] | 136 | and the builtins namespace, the namespace of the module :mod:`builtins`. The |
| Miss Islington (bot) | 855d624 | 2021-10-16 07:01:54 -0700 | [diff] [blame] | 137 | global namespace is searched first. If the names are not found there, the |
| Serhiy Storchaka | 2b57c43 | 2018-12-19 08:09:46 +0200 | [diff] [blame] | 138 | builtins namespace is searched. The :keyword:`!global` statement must precede |
| Miss Islington (bot) | 855d624 | 2021-10-16 07:01:54 -0700 | [diff] [blame] | 139 | all uses of the listed names. |
| Georg Brandl | 96593ed | 2007-09-07 14:15:41 +0000 | [diff] [blame] | 140 | |
| Nick Coghlan | 91e561a | 2015-08-05 23:07:24 +1000 | [diff] [blame] | 141 | The :keyword:`global` statement has the same scope as a name binding operation |
| 142 | in the same block. If the nearest enclosing scope for a free variable contains |
| 143 | a global statement, the free variable is treated as a global. |
| 144 | |
| 145 | .. XXX say more about "nonlocal" semantics here |
| 146 | |
| 147 | The :keyword:`nonlocal` statement causes corresponding names to refer |
| 148 | to previously bound variables in the nearest enclosing function scope. |
| 149 | :exc:`SyntaxError` is raised at compile time if the given name does not |
| 150 | exist in any enclosing function scope. |
| 151 | |
| 152 | .. index:: module: __main__ |
| 153 | |
| 154 | The namespace for a module is automatically created the first time a module is |
| 155 | imported. The main module for a script is always called :mod:`__main__`. |
| 156 | |
| 157 | Class definition blocks and arguments to :func:`exec` and :func:`eval` are |
| 158 | special in the context of name resolution. |
| 159 | A class definition is an executable statement that may use and define names. |
| 160 | These references follow the normal rules for name resolution with an exception |
| 161 | that unbound local variables are looked up in the global namespace. |
| 162 | The namespace of the class definition becomes the attribute dictionary of |
| 163 | the class. The scope of names defined in a class block is limited to the |
| 164 | class block; it does not extend to the code blocks of methods -- this includes |
| 165 | comprehensions and generator expressions since they are implemented using a |
| 166 | function scope. This means that the following will fail:: |
| 167 | |
| 168 | class A: |
| 169 | a = 42 |
| 170 | b = list(a + i for i in range(10)) |
| 171 | |
| 172 | .. _restrict_exec: |
| 173 | |
| 174 | Builtins and restricted execution |
| 175 | --------------------------------- |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 176 | |
| 177 | .. index:: pair: restricted; execution |
| 178 | |
| Georg Brandl | 495f7b5 | 2009-10-27 15:28:25 +0000 | [diff] [blame] | 179 | .. impl-detail:: |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 180 | |
| 181 | Users should not touch ``__builtins__``; it is strictly an implementation |
| Georg Brandl | 93dc9eb | 2010-03-14 10:56:14 +0000 | [diff] [blame] | 182 | detail. Users wanting to override values in the builtins namespace should |
| Georg Brandl | 1a3284e | 2007-12-02 09:40:06 +0000 | [diff] [blame] | 183 | :keyword:`import` the :mod:`builtins` module and modify its |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 184 | attributes appropriately. |
| 185 | |
| Naomi Ceder | 43c8a9e | 2017-05-22 14:09:55 -0700 | [diff] [blame] | 186 | The builtins namespace associated with the execution of a code block |
| 187 | is actually found by looking up the name ``__builtins__`` in its |
| 188 | global namespace; this should be a dictionary or a module (in the |
| 189 | latter case the module's dictionary is used). By default, when in the |
| 190 | :mod:`__main__` module, ``__builtins__`` is the built-in module |
| 191 | :mod:`builtins`; when in any other module, ``__builtins__`` is an |
| 192 | alias for the dictionary of the :mod:`builtins` module itself. |
| 193 | |
| 194 | |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 195 | .. _dynamic-features: |
| 196 | |
| 197 | Interaction with dynamic features |
| 198 | --------------------------------- |
| 199 | |
| Nick Coghlan | 91e561a | 2015-08-05 23:07:24 +1000 | [diff] [blame] | 200 | Name resolution of free variables occurs at runtime, not at compile time. |
| 201 | This means that the following code will print 42:: |
| 202 | |
| 203 | i = 10 |
| 204 | def f(): |
| 205 | print(i) |
| 206 | i = 42 |
| 207 | f() |
| 208 | |
| Georg Brandl | 96593ed | 2007-09-07 14:15:41 +0000 | [diff] [blame] | 209 | .. XXX from * also invalid with relative imports (at least currently) |
| 210 | |
| 211 | The :func:`eval` and :func:`exec` functions do not have access to the full |
| 212 | environment for resolving names. Names may be resolved in the local and global |
| 213 | namespaces of the caller. Free variables are not resolved in the nearest |
| 214 | enclosing namespace, but in the global namespace. [#]_ The :func:`exec` and |
| 215 | :func:`eval` functions have optional arguments to override the global and local |
| 216 | namespace. If only one namespace is specified, it is used for both. |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 217 | |
| 218 | |
| 219 | .. _exceptions: |
| 220 | |
| 221 | Exceptions |
| 222 | ========== |
| 223 | |
| 224 | .. index:: single: exception |
| 225 | |
| 226 | .. index:: |
| 227 | single: raise an exception |
| 228 | single: handle an exception |
| 229 | single: exception handler |
| 230 | single: errors |
| 231 | single: error handling |
| 232 | |
| 233 | Exceptions are a means of breaking out of the normal flow of control of a code |
| 234 | block in order to handle errors or other exceptional conditions. An exception |
| 235 | is *raised* at the point where the error is detected; it may be *handled* by the |
| 236 | surrounding code block or by any code block that directly or indirectly invoked |
| 237 | the code block where the error occurred. |
| 238 | |
| 239 | The Python interpreter raises an exception when it detects a run-time error |
| 240 | (such as division by zero). A Python program can also explicitly raise an |
| 241 | exception with the :keyword:`raise` statement. Exception handlers are specified |
| Alexandre Vassalotti | eca20b6 | 2008-05-16 02:54:33 +0000 | [diff] [blame] | 242 | with the :keyword:`try` ... :keyword:`except` statement. The :keyword:`finally` |
| 243 | clause of such a statement can be used to specify cleanup code which does not |
| 244 | handle the exception, but is executed whether an exception occurred or not in |
| 245 | the preceding code. |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 246 | |
| 247 | .. index:: single: termination model |
| 248 | |
| 249 | Python uses the "termination" model of error handling: an exception handler can |
| 250 | find out what happened and continue execution at an outer level, but it cannot |
| 251 | repair the cause of the error and retry the failing operation (except by |
| 252 | re-entering the offending piece of code from the top). |
| 253 | |
| 254 | .. index:: single: SystemExit (built-in exception) |
| 255 | |
| 256 | When an exception is not handled at all, the interpreter terminates execution of |
| 257 | the program, or returns to its interactive main loop. In either case, it prints |
| divyag9 | 778a910 | 2019-05-13 08:05:20 -0500 | [diff] [blame] | 258 | a stack traceback, except when the exception is :exc:`SystemExit`. |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 259 | |
| 260 | Exceptions are identified by class instances. The :keyword:`except` clause is |
| 261 | selected depending on the class of the instance: it must reference the class of |
| 262 | the instance or a base class thereof. The instance can be received by the |
| 263 | handler and can carry additional information about the exceptional condition. |
| 264 | |
| Georg Brandl | e720c0a | 2009-04-27 16:20:50 +0000 | [diff] [blame] | 265 | .. note:: |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 266 | |
| Georg Brandl | 96593ed | 2007-09-07 14:15:41 +0000 | [diff] [blame] | 267 | Exception messages are not part of the Python API. Their contents may change |
| 268 | from one version of Python to the next without warning and should not be |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 269 | relied on by code which will run under multiple versions of the interpreter. |
| 270 | |
| 271 | See also the description of the :keyword:`try` statement in section :ref:`try` |
| 272 | and :keyword:`raise` statement in section :ref:`raise`. |
| 273 | |
| Georg Brandl | 1aea30a | 2008-07-19 15:51:07 +0000 | [diff] [blame] | 274 | |
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 275 | .. rubric:: Footnotes |
| 276 | |
| Georg Brandl | 96593ed | 2007-09-07 14:15:41 +0000 | [diff] [blame] | 277 | .. [#] This limitation occurs because the code that is executed by these operations |
| 278 | is not available at the time the module is compiled. |