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