summaryrefslogtreecommitdiffstats
path: root/Doc/reference
diff options
context:
space:
mode:
authorAndrew Svetlov <andrew.svetlov@gmail.com>2012-08-14 12:44:53 (GMT)
committerAndrew Svetlov <andrew.svetlov@gmail.com>2012-08-14 12:44:53 (GMT)
commit6bcd00afa9dde18c1bbeb0a4d2fb376bac9dfd2c (patch)
treef75896a2cb3ebff87eaf977295ee6b3918df3781 /Doc/reference
parentfaee75c33af1e8ccbf0d4349efe62dc9637779c6 (diff)
downloadcpython-6bcd00afa9dde18c1bbeb0a4d2fb376bac9dfd2c.zip
cpython-6bcd00afa9dde18c1bbeb0a4d2fb376bac9dfd2c.tar.gz
cpython-6bcd00afa9dde18c1bbeb0a4d2fb376bac9dfd2c.tar.bz2
Issue #14167: Document return statement in finally blocks.
Patch by Yury Selivanov.
Diffstat (limited to 'Doc/reference')
-rw-r--r--Doc/reference/compound_stmts.rst31
1 files changed, 22 insertions, 9 deletions
diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst
index c99b65a..275cfd2 100644
--- a/Doc/reference/compound_stmts.rst
+++ b/Doc/reference/compound_stmts.rst
@@ -290,15 +290,28 @@ clause are not handled by the preceding :keyword:`except` clauses.
.. index:: keyword: finally
-If :keyword:`finally` is present, it specifies a 'cleanup' handler. The
-:keyword:`try` clause is executed, including any :keyword:`except` and
-:keyword:`else` clauses. If an exception occurs in any of the clauses and is
-not handled, the exception is temporarily saved. The :keyword:`finally` clause
-is executed. If there is a saved exception, it is re-raised at the end of the
-:keyword:`finally` clause. If the :keyword:`finally` clause raises another
-exception or executes a :keyword:`return` or :keyword:`break` statement, the
-saved exception is lost. The exception information is not available to the
-program during execution of the :keyword:`finally` clause.
+If :keyword:`finally` is present, it specifies a 'cleanup' handler.
+The :keyword:`try` clause is executed, including any :keyword:`except`
+and :keyword:`else` clauses. If an exception occurs in any of the
+clauses and is not handled, the exception is temporarily saved. The
+:keyword:`finally` clause is executed. If there is a saved exception
+or :keyword:`break` statement, it is re-raised at the end of the
+:keyword:`finally` clause. If the :keyword:`finally` clause raises
+another exception the saved exception is set as the context of the new
+exception; if the :keyword:`finally` clause executes a
+:keyword:`return` statement, the saved exception is discarded::
+
+ def f():
+ try:
+ 1/0
+ finally:
+ return 42
+
+ >>> f()
+ 42
+
+The exception information is not available to the program during execution of
+the :keyword:`finally` clause.
.. index::
statement: return