[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