summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEthan Furman <ethan@stoneleaf.us>2015-01-15 06:25:27 (GMT)
committerEthan Furman <ethan@stoneleaf.us>2015-01-15 06:25:27 (GMT)
commit2f825af728db4e67292ecb7cef1a4de7c6469ef9 (patch)
treeaf07351b1d6e04b52e991a508dbec9bbbeeb2f46
parent845d33c526b6e6408cb75a4a66488d4c87200716 (diff)
downloadcpython-2f825af728db4e67292ecb7cef1a4de7c6469ef9.zip
cpython-2f825af728db4e67292ecb7cef1a4de7c6469ef9.tar.gz
cpython-2f825af728db4e67292ecb7cef1a4de7c6469ef9.tar.bz2
Issue22988: clarify yield and exception blocks
-rw-r--r--Doc/reference/expressions.rst9
1 files changed, 5 insertions, 4 deletions
diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst
index 9fc5f4d..d0682ca 100644
--- a/Doc/reference/expressions.rst
+++ b/Doc/reference/expressions.rst
@@ -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.