File not closed on exception
Ulrich Eckhardt
eckhardt at satorlaser.com
Tue Oct 20 07:26:03 EDT 2009
arve.knudsen at gmail.com wrote:
> On Oct 19, 3:48 pm, Ethan Furman <et... at stoneleaf.us> wrote:
>> arve.knud... at gmail.com wrote:
[...]
>>> def create():
>>> f = file("tmp", "w")
>>> raise Exception
>>>
>>> try:
>>> create()
>>> finally:
>>> os.remove("tmp")
>>>
[...]
>> When an exception is raised, the entire stack frame at that location
>> (which includes local vars) is saved in the exception traceback. [...]
>> this is better:
>>
>> def create():
>> f = file("tmp", "w")
>> try:
>> do_stuff_that_raises_exception
>> finally:
>> os.remove("tmp")
[...]
> Why should this work? If I replace "do_stuff_that_raises_exception"
> with "raise Exception", it fails in the same way, since the file is
> open. Maybe you forgot "f.close()"?
I was puzzled by the same, but too lazy to try or ask. Anyhow, I think that
if you replaced the 'os.remove("tmp")' with 'f.close()', then the calling
function can remain the same as you wrote. This is basically the same as
when using the new-style "with", as mentioned by Gabriel.
Uli
--
Sator Laser GmbH
Geschäftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932
More information about the Python-list
mailing list