A fun python CLI program for all to enjoy!

MRAB python at mrabarnett.plus.com
Fri May 6 20:38:44 EDT 2016


On 2016-05-07 00:58, DFS wrote:
> On 5/6/2016 7:29 PM, Ethan Furman wrote:
>> On 05/06/2016 04:12 PM, DFS wrote:
>>> On 5/6/2016 4:30 PM, MRAB wrote:
>>
>>>>    If you don't want to use the 'with' statement, note that closing the
>>>> file is:
>>>>
>>>>            f.close()
>>>>
>>>>    It needs the "()"!
>>>
>>> I used close() in 1 place, but close without parens in 2 other places.
>>> So it works either way.  Good catch.
>>
>> No, it doesn't.  `f.close` simple returns the close function, it doesn't
>> call it.  The "it works" was simply because Python closed the files for
>> you later.
>>
>> Not a big deal in a small program like this, but still a mistake.
>
>
> Yes.
>
> Check out the answer by 'unutbu' here:
>
> http://stackoverflow.com/questions/1832528/is-close-necessary-when-using-iterator-on-a-python-file-object
>
> He says "I...checked /proc/PID/fd for when the file descriptor was
> closed. It appears that when you break out of the for loop, the file is
> closed for you."
>
If you read the comments for that answer, you'll find the explanation.

> Improper f.close didn't seem to affect any of the files my program wrote
> - and I checked a lot of them when I was writing the code.
>
> Maybe it worked because the last time the file was written to was in a
> for loop, so I got lucky and the files weren't truncated?  Don't know.
>
> Did you notice any other gotchas in the program?
>




More information about the Python-list mailing list