[capi-sig] What's up with PyTypeObject and functions?
M.-A. Lemburg
mal at egenix.com
Wed Nov 28 10:02:09 CET 2012
On 28.11.2012 04:01, Robert Steckroth wrote:
> Hey Gang, why is the below snippet for error checking not working? I wan't
> to be able to pass in different PyTypeObjects
> to the CHECK_TYPE function and check an object for that type.
> It works fine when I insert put &PyString_Type directly into
> the function like so -->
> if ( ! PyObject_TypeCheck(s_obj, &PyString_type) )
> However, the CHECK_TYPE function will return -1 if I pass the PyTypeObject
> in, like at the bottom of this message.
> Why does PyObject_TypeCheck not work if PyTypeObject is first passed into a
> function?
>
>
> int CHECK_TYPE(PyObject *s_obj, PyTypeObject obj_type) {
You need *obj_type here, since you need the pointer to the object, not
the object itself.
> if ( ! s_obj )
> return 1;
>
> if ( ! PyObject_TypeCheck(s_obj, &obj_type) ) {
This needs to be obj_type.
Your code will pass in the address of
the PyTypeObject on the stack, which will not match any of the
type objects in the Python type system.
> PyErr_Format(PyExc_TypeError, "[ %s ] object needs to be of
> type [ %s ]\n\nUsage: %s", PyString_AsString(PyObject_Repr(s_obj)),
> obj_type.tp_name, obj_type.tp_doc );
This code leaks memory since the representation object is not freed.
> return -1; }
>
> return 1;
>
> }
>
> if ( !CHECK_TYPE(align, PyString_Type) ) return NULL;
This needs to the &PyString_Type
--
Marc-Andre Lemburg
eGenix.com
Professional Python Services directly from the Source (#1, Nov 28 2012)
>>> Python Projects, Consulting and Support ... http://www.egenix.com/
>>> mxODBC.Zope/Plone.Database.Adapter ... http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
________________________________________________________________________
::: Try our new mxODBC.Connect Python Database Interface for free ! ::::
eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48
D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
Registered at Amtsgericht Duesseldorf: HRB 46611
http://www.egenix.com/company/contact/
More information about the capi-sig
mailing list