[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