[Python-checkins] python/nondist/peps pep-0341.txt, NONE, 1.1 pep-0000.txt, 1.303, 1.304

goodger@users.sourceforge.net goodger at users.sourceforge.net
Sat May 7 14:13:52 CEST 2005


Update of /cvsroot/python/python/nondist/peps
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv660

Modified Files:
	pep-0000.txt 
Added Files:
	pep-0341.txt 
Log Message:
added PEP 341, "Unifying try-except and try-finally", by Reinhold Birkenfeld

--- NEW FILE: pep-0341.txt ---
PEP: 341
Title: Unifying try-except and try-finally
Version: $Revision: 1.1 $
Last-Modified: $Date: 2005/05/07 12:13:49 $
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.

    However, according to Guido, it should be a piece of cake to
    implement[1] -- at least for a core hacker.


References

    [1] http://mail.python.org/pipermail/python-dev/2005-May/053319.html


Copyright

    This document has been placed in the public domain.



Local Variables:
mode: indented-text
indent-tabs-mode: nil
sentence-end-double-space: t
fill-column: 70
End:

Index: pep-0000.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v
retrieving revision 1.303
retrieving revision 1.304
diff -u -d -r1.303 -r1.304
--- pep-0000.txt	27 Apr 2005 07:26:55 -0000	1.303
+++ pep-0000.txt	7 May 2005 12:13:49 -0000	1.304
@@ -118,6 +118,7 @@
  S   337  Logging Usage in the Standard Library        Dubner
  S   338  Executing modules inside packages with '-m'  Coghlan
  S   340  Anonymous Block Statements                   GvR
+ S   341  Unifying try-except and try-finally          Birkenfeld
  S   754  IEEE 754 Floating Point Special Values       Warnes
 
  Finished PEPs (done, implemented in CVS)
@@ -376,6 +377,7 @@
  S   338  Executing modules inside packages with '-m'  Coghlan
  I   339  How to Change CPython's Bytecode             Cannon
  S   340  Anonymous Block Statements                   GvR
+ S   341  Unifying try-except and try-finally          Birkenfeld
  SR  666  Reject Foolish Indentation                   Creighton
  S   754  IEEE 754 Floating Point Special Values       Warnes
  I  3000  Python 3.0 Plans                             Kuchling, Cannon
@@ -405,6 +407,7 @@
     Batista, Facundo         facundo at taniquetil.com.ar
     Baxter, Anthony          anthony at interlink.com.au
     Bellman, Thomas          bellman+pep-divmod at lysator.liu.se
+    Birkenfeld, Reinhold     reinhold-birkenfeld-nospam at wolke7.net
     Cannon, Brett            brett at python.org
     Carlson, Josiah          jcarlson at uci.edu
     Carroll, W Isaac         icarroll at pobox.com



More information about the Python-checkins mailing list