rest25/reference/executionmodel.rst => rest262/reference/executionmodel.rst
47
48.. index:: single: scope
49
50A :dfn:`scope` defines the visibility of a name within a block.  If a local
51variable is defined in a block, its scope includes that block.  If the
52definition occurs in a function block, the scope extends to any blocks contained
53within the defining one, unless a contained block introduces a different binding
54for the name.  The scope of names defined in a class block is limited to the
n55-class block; it does not extend to the code blocks of methods.
n55+class block; it does not extend to the code blocks of methods -- this includes
56+generator expressions since they are implemented using a function scope.  This
57+means that the following will fail::
58+ 
59+   class A:
60+       a = 42
61+       b = list(a + i for i in range(10))
56
57.. index:: single: environment
58
59When a name is used in a code block, it is resolved using the nearest enclosing
60scope.  The set of all such scopes visible to a code block is called the block's
61:dfn:`environment`.
62
63.. index:: pair: free; variable
76:exc:`UnboundLocalError` exception is raised.  :exc:`UnboundLocalError` is a
77subclass of :exc:`NameError`.
78
79.. index:: statement: from
80
81The following constructs bind names: formal parameters to functions,
82:keyword:`import` statements, class and function definitions (these bind the
83class or function name in the defining block), and targets that are identifiers
n84-if occurring in an assignment, :keyword:`for` loop header, or in the second
n90+if occurring in an assignment, :keyword:`for` loop header, in the second
85-position of an :keyword:`except` clause header.  The :keyword:`import` statement
91+position of an :keyword:`except` clause header or after :keyword:`as` ia
92+:keyword:`with` statement.  The :keyword:`import` statement
86-of the form "``from ...import *``" binds all names defined in the imported
93+of the form ``from ... import *`` binds all names defined in the imported
87module, except those beginning with an underscore.  This form may only be used
88at the module level.
89
90A target occurring in a :keyword:`del` statement is also considered bound for
91this purpose (though the actual semantics are to unbind the name).  It is
92illegal to unbind a name that is referenced by an enclosing scope; the compiler
93will report a :exc:`SyntaxError`.
94
192block in order to handle errors or other exceptional conditions.  An exception
193is *raised* at the point where the error is detected; it may be *handled* by the
194surrounding code block or by any code block that directly or indirectly invoked
195the code block where the error occurred.
196
197The Python interpreter raises an exception when it detects a run-time error
198(such as division by zero).  A Python program can also explicitly raise an
199exception with the :keyword:`raise` statement. Exception handlers are specified
n200-with the :keyword:`try` ... :keyword:`except` statement.  The :keyword:`try` ...
n207+with the :keyword:`try` ... :keyword:`except` statement.  The :keyword:`finally`
201-:keyword:`finally` statement specifies cleanup code which does not handle the
208+clause of such a statement can be used to specify cleanup code which does not
202-exception, but is executed whether an exception occurred or not in the preceding
209+handle the exception, but is executed whether an exception occurred or not in
203-code.
210+the preceding code.
204
205.. index:: single: termination model
206
207Python uses the "termination" model of error handling: an exception handler can
208find out what happened and continue execution at an outer level, but it cannot
n209-repair the cause of the error and retry the failing operation (except by re-
n216+repair the cause of the error and retry the failing operation (except by
210-entering the offending piece of code from the top).
217+re-entering the offending piece of code from the top).
211
212.. index:: single: SystemExit (built-in exception)
213
214When an exception is not handled at all, the interpreter terminates execution of
215the program, or returns to its interactive main loop.  In either case, it prints
216a stack backtrace, except when the exception is  :exc:`SystemExit`.
217
218Exceptions are identified by class instances.  The :keyword:`except` clause is
219selected depending on the class of the instance: it must reference the class of
220the instance or a base class thereof.  The instance can be received by the
221handler and can carry additional information about the exceptional condition.
222
223Exceptions can also be identified by strings, in which case the
224:keyword:`except` clause is selected by object identity.  An arbitrary value can
225be raised along with the identifying string which can be passed to the handler.
226
t227-.. deprecated:: 2.5
228-   String exceptions should not be used in new code. They will not be supported in
229-   a future version of Python.  Old code should be rewritten to use class
230-   exceptions instead.
231- 
232.. warning::
233
234   Messages to exceptions are not part of the Python API.  Their contents may
235   change from one version of Python to the next without warning and should not be
236   relied on by code which will run under multiple versions of the interpreter.
237
238See also the description of the :keyword:`try` statement in section :ref:`try`
239and :keyword:`raise` statement in section :ref:`raise`.
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op