Python exceptions and refcounts
Bernhard Herzog
bh at intevation.de
Tue Jan 22 08:28:26 EST 2002
More information about the Python-list mailing list
Tue Jan 22 08:28:26 EST 2002
- Previous message (by thread): Python exceptions and refcounts
- Next message (by thread): Python exceptions and refcounts
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Christian Weichenberger <x_beelze at hotmail.com> writes: > -------------------------------------------- > import gc > import sys; > > def foo(d): > print "Refcount in function:", sys.getrefcount(d); > #del d > raise RuntimeError > > dic = {"spam1": 100, "spam2": 200}; > print "Refcount after init:", sys.getrefcount(dic); > > try: > foo(dic); > except RuntimeError: > #sys.exc_traceback = None; > pass ; > > print "Refcount after error handling:", sys.getrefcount(dic); > print "Unreachable objects: ", gc.collect(); > -------------------------------------------- > > The first print is ok, the reference count is 2. In the function, the > ref count is 4 which is the first thing that is not very > understandable to me. Shouldn't it be 3 (1 for the init, 1 for the > passing of the reference to the function and 1 for the sys.getrefcount > function call)? There's also a refcount for the local variable d. > Anyway, after rasing and handling the exception the refcount then is > 3. Ideally it should be 2, as it is when the offending raise statement > is commented out. The traceback holds references to the local variables including the dictionary. Bernhard -- Intevation GmbH http://intevation.de/ Sketch http://sketch.sourceforge.net/ MapIt! http://mapit.de/
- Previous message (by thread): Python exceptions and refcounts
- Next message (by thread): Python exceptions and refcounts
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list