Fredrik Lundh wrote:
"Bryan" wrote


the above is not the same. make the a = ... raise an exception and you'll see 
the difference.

s = ... #
a = 1/0
s.close()

as you can see, s.close() will never be called. also, in this example, i intentionally didn't put the extra try/except around the try/finally statement.


file handles and sockets are closed when the objects are garbage collected.
under CPython, they're usually closed when they go out of scope.

using try/finally on files and sockets are usually overkill.

</F>




i was trying to be generic and use the term resource. i know you are correct about file handles and sockets. there are other resources that don't behave so nicely. i'm currently using a third party module that will crash python (the entire interpreter GPF's) if you don't explicitly close the resource before your python script exits. other times, depending on a variable to go out of scope to have a resource automically close itself is not practical. or sometimes you want a resource to be closed, but still hold on to the reference. so, i don't feel as strongly as you do that try/finally on even files and socks are overkill. of course on small scripts, i don't use try/finally or close() either :)


bryan

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to