PyArg_ParseTuple part 2

John john.thai at dspfactory.com
Wed Jun 13 15:03:28 EDT 2001


Okay, here's some code (I've omitted some of the error checking for
simplicity):

static PyObject *PyGetComInterface(PyObject *self, PyObject *args) {

    PyObject *t;
    PyObject *pyList;
    int x;

    // extract list
    PyArg_ParseTuple(args, "O!", &PyList_Type, pyList);

    // make a tuple version of list
    t = PyList_AsTuple(pyList);

    // extract an integer from list *Note: t is always null at this point
    if (t != NULL) {
        PyArg_ParseTuple(t, "i", &x);
        fprintf(stdout, "List contains: %d\n", x);
    }

    Py_INCREF(Py_None);
    return Py_None;
}


"Michael Hudson" <mwh at python.net> wrote in message
news:m3g0d4w7gy.fsf at atrus.jesus.cam.ac.uk...
> "John" <john.thai at dspfactory.com> writes:
>
> > Hi,
> >
> >     In an extended python c function, I use PyArg_ParseTuple to extract
a
> > list object from python.  I then use PyList_AsTuple to get a tuple
version
> > of the list.  I'm expecting an list of 2 integers, so I use
PyArg_ParseTuple
> > again, passing in this new derived tuple, and specifying "ii".  Should
this
> > not work?  First, after I call PyList_AsTuple, I get NULL back instead
of a
> > PyObject.  Second, lets say I pass variable x (from python) = [1,2] into
my
> > function, right after making this function call foo(x), no matter what I
> > type, either x, or just enter, I get the following msg:
> >
> > SystemError: C:\Code\python\dist\src\Objects\listobject.c:1317: bad
argument
> > to
> > internal function
> >
> > Anyone know what's going on?
>
> Err, you are specifying your function as METH_VARARGS, right?  (Just a
> guess).  Otherwise, how about showing us some code - I can't really
> follow your description above.
>
> > Related questions:  Is there a fast way of extracting elements from a
list,
> > other than using PyList_GetItem, then converting the PyObject into the
type
> > you are looking for?
>
> Well, there's PyList_GET_ITEM, but no, not really.  Lists store
> PyObject*s - what were you expecting?
>
> > And why isn't there a PyInt_FromInt(int) function?
>
> There's PyInt_FromLong - is that what you're after?
>
> Cheers,
> M.
>
> --
>   Presumably pronging in the wrong place zogs it.
>                                         -- Aldabra Stoddart, ucam.chat





More information about the Python-list mailing list