skip to navigation
skip to content

Python Wiki

Python Insider Blog

Python 2 or 3?

Help Fund Python

[Python resources in languages other than English]

Non-English Resources

Add an event to this calendar.

Times are shown in UTC/GMT.

Add an event to this calendar.

PEP: 341
Title: Unifying try-except and try-finally
Version: ca282df74fce
Last-Modified:  2007-05-01 20:39:17 +0000 (Tue, 01 May 2007)
Author: Georg Brandl <georg at python.org>
Status: Final
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 occurred' 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] | '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. Thomas Lee has submitted a patch[2]. However, according to Guido, it should be a piece of cake to implement[1] -- at least for a core hacker. This patch was committed 17 December 2005, SVN revision 41740 [3]. 

References

 [1] http://mail.python.org/pipermail/python-dev/2005-May/053319.html [2] http://python.org/sf/1355913 [3] http://mail.python.org/pipermail/python-checkins/2005-December/048457.html 

Copyright

 This document has been placed in the public domain.