mirror of https://github.com/python/cpython
Update tutorial wrt PEP 341 try-except-finally statement
This commit is contained in:
parent
c54ae35782
commit
8a85ac660b
|
@ -3692,19 +3692,49 @@ Traceback (most recent call last):
|
||||||
KeyboardInterrupt
|
KeyboardInterrupt
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
A \emph{finally clause} is executed whether or not an exception has
|
A \emph{finally clause} is always executed before leaving the
|
||||||
occurred in the try clause. When an exception has occurred, it is
|
\keyword{try} statement, whether an exception has occurred or not.
|
||||||
re-raised after the finally clause is executed. The finally clause is
|
When an exception has occurred in the \keyword{try} clause and has not
|
||||||
also executed ``on the way out'' when the \keyword{try} statement is
|
been handled by an \keyword{except} clause (or it has occurred in a
|
||||||
left via a \keyword{break} or \keyword{return} statement.
|
\keyword{except} or \keyword{else} clause), it is re-raised after the
|
||||||
|
\keyword{finally} clause has been executed. The \keyword{finally} clause
|
||||||
|
is also executed ``on the way out'' when any other clause of the
|
||||||
|
\keyword{try} statement is left via a \keyword{break}, \keyword{continue}
|
||||||
|
or \keyword{return} statement. A more complicated example:
|
||||||
|
|
||||||
The code in the finally clause is useful for releasing external
|
\begin{verbatim}
|
||||||
resources (such as files or network connections), regardless of
|
>>> def divide(x, y):
|
||||||
whether the use of the resource was successful.
|
... try:
|
||||||
|
... result = x / y
|
||||||
|
... except ZeroDivisionError:
|
||||||
|
... print "division by zero!"
|
||||||
|
... else:
|
||||||
|
... print "result is", result
|
||||||
|
... finally:
|
||||||
|
... print "executing finally clause"
|
||||||
|
...
|
||||||
|
>>> divide(2, 1)
|
||||||
|
result is 2
|
||||||
|
executing finally clause
|
||||||
|
>>> divide(2, 0)
|
||||||
|
division by zero!
|
||||||
|
executing finally clause
|
||||||
|
>>> divide("2", "1")
|
||||||
|
executing finally clause
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in ?
|
||||||
|
File "<stdin>", line 3, in divide
|
||||||
|
TypeError: unsupported operand type(s) for /: 'str' and 'str'
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
A \keyword{try} statement must either have one or more except clauses
|
As you can see, the \keyword{finally} clause is executed in any
|
||||||
or one finally clause, but not both (because it would be unclear which
|
event. The \exception{TypeError} raised by dividing two strings
|
||||||
clause should be executed first).
|
is not handled by the \keyword{except} clause and therefore
|
||||||
|
re-raised after the \keyword{finally} clauses has been executed.
|
||||||
|
|
||||||
|
In real world applications, the \keyword{finally} clause is useful
|
||||||
|
for releasing external resources (such as files or network connections),
|
||||||
|
regardless of whether the use of the resource was successful.
|
||||||
|
|
||||||
|
|
||||||
\chapter{Classes \label{classes}}
|
\chapter{Classes \label{classes}}
|
||||||
|
|
Loading…
Reference in New Issue