mirror of
https://github.com/python/cpython.git
synced 2024-11-30 21:34:17 +08:00
Issue22988: clarify yield and exception blocks
This commit is contained in:
commit
e62430eda4
@ -330,8 +330,9 @@ The execution starts when one of the generator's methods is called. At that
|
||||
time, the execution proceeds to the first yield expression, where it is
|
||||
suspended again, returning the value of :token:`expression_list` to the generator's
|
||||
caller. By suspended, we mean that all local state is retained, including the
|
||||
current bindings of local variables, the instruction pointer, and the internal
|
||||
evaluation stack. When the execution is resumed by calling one of the
|
||||
current bindings of local variables, the instruction pointer, the internal
|
||||
evaluation stack, and the state of any exception handling. When the execution
|
||||
is resumed by calling one of the
|
||||
generator's methods, the function can proceed exactly as if the yield expression
|
||||
were just another external call. The value of the yield expression after
|
||||
resuming depends on the method which resumed the execution. If
|
||||
@ -348,8 +349,8 @@ suspended. The only difference is that a generator function cannot control
|
||||
where the execution should continue after it yields; the control is always
|
||||
transferred to the generator's caller.
|
||||
|
||||
Yield expressions are allowed in the :keyword:`try` clause of a :keyword:`try`
|
||||
... :keyword:`finally` construct. If the generator is not resumed before it is
|
||||
Yield expressions are allowed anywhere in a :keyword:`try` construct. If the
|
||||
generator is not resumed before it is
|
||||
finalized (by reaching a zero reference count or by being garbage collected),
|
||||
the generator-iterator's :meth:`~generator.close` method will be called,
|
||||
allowing any pending :keyword:`finally` clauses to execute.
|
||||
|
Loading…
Reference in New Issue
Block a user