Nikolaus Rath wrote:
Nikolaus Rath <nikol...@rath.org> writes:
Hi,

Please consider this example:
[....]

I think I managed to narrow down the problem a bit. It seems that when
a function returns normally, its local variables are immediately
destroyed. However, if the function is left due to an exception, the
local variables remain alive:

---------snip---------
#!/usr/bin/env python
import gc

class testclass(object):
    def __init__(self):
        print "Initializing"
def __del__(self):
        print "Destructing"
def dostuff(fail):
    obj = testclass()

    if fail:
        raise TypeError
print "Calling dostuff"
dostuff(fail=False)
print "dostuff returned"

try:
    print "Calling dostuff"
    dostuff(fail=True)
except TypeError:
    pass

gc.collect()
print "dostuff returned" ---------snip---------


Prints out:


---------snip---------
Calling dostuff
Initializing
Destructing
dostuff returned
Calling dostuff
Initializing
dostuff returned
Destructing
---------snip---------


Is there a way to have the obj variable (that is created in dostuff())
destroyed earlier than at the end of the program? As you can see, I
already tried to explicitly call the garbage collector, but this does
not help.

Are the objects retained because there's a reference to the stack
frame(s) in the traceback?
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to