Issue #14167: Document return statement in finally blocks.

Patch by Yury Selivanov.
This commit is contained in:
Andrew Svetlov 2012-08-14 15:44:53 +03:00
parent faee75c33a
commit 6bcd00afa9
1 changed files with 22 additions and 9 deletions

View File

@ -290,15 +290,28 @@ clause are not handled by the preceding :keyword:`except` clauses.
.. index:: keyword: finally .. index:: keyword: finally
If :keyword:`finally` is present, it specifies a 'cleanup' handler. The If :keyword:`finally` is present, it specifies a 'cleanup' handler.
:keyword:`try` clause is executed, including any :keyword:`except` and The :keyword:`try` clause is executed, including any :keyword:`except`
:keyword:`else` clauses. If an exception occurs in any of the clauses and is and :keyword:`else` clauses. If an exception occurs in any of the
not handled, the exception is temporarily saved. The :keyword:`finally` clause clauses and is not handled, the exception is temporarily saved. The
is executed. If there is a saved exception, it is re-raised at the end of the :keyword:`finally` clause is executed. If there is a saved exception
:keyword:`finally` clause. If the :keyword:`finally` clause raises another or :keyword:`break` statement, it is re-raised at the end of the
exception or executes a :keyword:`return` or :keyword:`break` statement, the :keyword:`finally` clause. If the :keyword:`finally` clause raises
saved exception is lost. The exception information is not available to the another exception the saved exception is set as the context of the new
program during execution of the :keyword:`finally` clause. 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:: .. index::
statement: return statement: return