Anthony Baxter wrote:
> On 12/13/06, Holger Joukl <[EMAIL PROTECTED]> wrote:
>> I did read this but didn't think it applied to my situation. I'm quite
>> sure that the refcount of the local variable is 1 before the local scope
>> is left.
>> So let me rephrase the question: Even if I can make sure that non of the
>> problematic situtions apply, might it _still_ happen that __del__ gets
>> called
>> after some other code has already been "entered"?
> 
> You shouldn't rely on __del__ being called exactly when you expect it,
> particularly in a threaded application. Make explicit cleanup calls,
> instead.

a nice way to do such things in python 2.5 is using the with statement. this 
ensures to call a
__exit__ (cleanup) function after a __enter__ function was called, no matter if 
there is a exception
or something other in between.

with open("foo.txt","w") as fp:
        fp.write("foo")

translates to:

mgr = open("foo.txt","w")

# well, in the case of files, __enter__ just returns self
fp = mgr.__enter__()

try:
        fp.write("foo")
finally:
        mgr.__exit__() # this calls fp.close()


this of course is a simplified translation of the with statement.
see more details here: http://www.python.org/dev/peps/pep-0343/

with is also cool for using it in combination with mutexes and similar stuff.
it would also be possible to write a transaction manager which calls commit() 
or abort()
automatically, so you can just write:

with new_transaction():
        # if do_stuff() returns, commit() will be called
        # if it raises an exception abort() will be called
        do_stuff()

But if you can't use python 2.5, there is no other way then:

try:
        do_stuff()
finally:
        cleanup()
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to