Python C API (PyObject_CallMethod clear object)
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Mon Jan 26 12:30:06 EST 2009
En Mon, 26 Jan 2009 08:47:31 -0200, <googler.1.webmaster at spamgourmet.com>
escribió:
> On 26 Jan., 03:25, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
>> En Sun, 25 Jan 2009 23:46:01 -0200,
>> <googler.1.webmas... at spamgourmet.com> escribió:
>>
>> > I have a problm with deallocating stuff. I call a function with this
>> > command:
>>
>> > PyObject *rvalue = PyObject_CallMethod(obj, "execute","",NULL);
>>
>> > if(rvalue==NULL)
>> > PyErr_Print();
>> > else
>> > Py_DECREF(rvalue);
>
> Yes, you are right. I got this issue not in syntax error, I get it on
> a runtime error like this:
>
> t = MyImage()
> self.test("hallo") #test takes an integer so this would throw an
> exception.
>
> Here you see, an object of the type MyImage() was created but its not
> deleted. 't' is a local reference so how can I do that?
It will be deleted after the last reference to it is released, as every
object in Python. If the above two lines are the whole function code, this
will happen when exiting the function. If some other object holds a
reference to this MyImage instance (by example, by doing xxx.attribute =
t, or inserting it in a list) then that won't happen until all those
references are released.
Note that, in Python 2.x, the traceback object holds a reference to all
local variables -- if you store the traceback somewhere, those objects
won't be deleted.
--
Gabriel Genellina
More information about the Python-list
mailing list