[Python-Dev] Pre-PEP: Unifying try-except and try-finally
Guido van Rossum
gvanrossum at gmail.com
Wed May 4 19:09:43 CEST 2005
Nice one. Should be a piece of cake to implement. Please talk to
peps at python.org about getting it checked into the PEP database.
I'm +1 on accepting this now -- anybody against?
On 5/4/05, Reinhold Birkenfeld <reinhold-birkenfeld-nospam at wolke7.net> wrote:
> Hello,
>
> after proposing this here (albeit deep in the PEP 340 thread) and
> getting a somewhat affirmatory response from Guido, I have written
> something that could become a PEP if sufficiently hatched...
>
> ---------------------------
>
> PEP: XXX
> Title: Unifying try-except and try-finally
> Version: $Revision: $
> Last-Modified: $Date: $
> Author: Reinhold Birkenfeld <reinhold-birkenfeld-nospam at wolke7.net>
> Status: Draft
> Type: Standards Track
> Content-Type: text/plain
> Created: 04-May-2005
> Post-History:
>
> Abstract
>
> This PEP proposes a change in the syntax and semantics of try
> statements to allow combined try-except-finally blocks. This
> means in short that it would be valid to write
>
> try:
> <do something>
> except Exception:
> <handle the error>
> finally:
> <cleanup>
>
> Rationale/Proposal
>
> There are many use cases for the try-except statement and
> for the try-finally statement per se; however, often one needs
> to catch exceptions and execute some cleanup code afterwards.
> It is slightly annoying and not very intelligible that
> one has to write
>
> f = None
> try:
> try:
> f = open(filename)
> text = f.read()
> except IOError:
> print 'An error occured'
> finally:
> if f:
> f.close()
>
> So it is proposed that a construction like this
>
> try:
> <suite 1>
> except Ex1:
> <suite 2>
> <more except: clauses>
> else:
> <suite 3>
> finally:
> <suite 4>
>
> be exactly the same as the legacy
>
> try:
> try:
> <suite 1>
> except Ex1:
> <suite 2>
> <more except: clauses>
> else:
> <suite 3>
> finally:
> <suite 4>
>
> This is backwards compatible, and every try statement that is
> legal today would continue to work.
>
> Changes to the grammar
>
> The grammar for the try statement, which is currently
>
> try_stmt: ('try' ':' suite (except_clause ':' suite)+
> ['else' ':' suite] | 'try' ':' suite 'finally' ':' suite)
>
> would have to become
>
> try_stmt: ('try' ':' suite (except_clause ':' suite)+
> ['else' ':' suite] ['finally' ':' suite] |
> 'try' ':' suite (except_clause ':' suite)*
> ['else' ':' suite] 'finally' ':' suite)
>
> Implementation
>
> As the PEP author currently does not have sufficient knowledge
> of the CPython implementation, he is unfortunately not able
> to deliver one.
>
> References
>
> None yet.
>
> Copyright
>
> This document has been placed in the public domain.
>
> -----------------------
> Reinhold
>
> --
> Mail address is perfectly valid!
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/guido%40python.org
>
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev
mailing list