Opening files without closing them

Peter Hansen peter at
Tue Mar 7 20:29:15 CET 2006

3c273 wrote:
> "Robert Kern" <robert.kern at> wrote in message
> news:mailman.2794.1141683892.27775.python-list at
>>Paul Rubin wrote:
>>>Say that the open is inside the try block.  If the file can't be
>>>opened, then 'open' raises an exception, 'f' doesn't get set, and then
>>>the 'finally' clause tries to close f.  f might have been previously
>>>bound to some other file (which still has other handles alive) and so
>>>the wrong file gets closed.
>>And even if 'f' wasn't bound to anything, you will get a NameError instead
> of
>>the exception that you're really interested in seeing.
> Thanks to both of you. So in order to be thorough, should I be doing:
> try:
>     f=open('file')
> except: IOError:
>     print 'doesn't exist'
>     so_something_else_instead()
> try:
>     contents =
> finally:
>     f.close()

Unfortunately, that would still have trouble if the first exception 
handler was executed, since then you'd try read from f, which would fail 
with another exception, and then you'd try to close f, and that would 
probably fail and raise an exception that isn't caught anywhere.

So this is better, though probably excessive in small scripts:

     f = open('file')
except IOError:
     # do something else
         content =

This takes advantage of "else" on try statements, which executes only if 
the except statement is not executed.


More information about the Python-list mailing list