which one of these is better?

John Salerno johnjsal at NOSPAMgmail.com
Thu Oct 26 22:50:49 CEST 2006

Fredrik Lundh wrote:

> This wasn't very difficult, was it?

Well when you put it that way, no! :)

But one thing that caught me up was what happens if the initial 
expression raises an exception? For example:

with open('file.txt'):
     #do stuff

If the file can't be opened for whatever reason, does __exit__ get 
called, or can it not get that far if the expression doesn't evaluate?

I guess my thinking was this: before the with statement came along, the 
idiom for opening files was something like this:

     #do stuff
except IOError:
     #more stuff
except OtherError:
     #yet more

and so forth (and all this was wrapped in a try/finally blocked to close 
the file, I think). But now that we can use the 'with' statement, it 
seems like the initial opening of the file (previously "checked" in the 
try block) is now just floating around and still requires a try block 
wrapped around it in case something goes wrong.

More information about the Python-list mailing list