On Mon, Oct 11, 2010 at 07:06, Ioan Ferencik <ioan.feren...@tkk.fi> wrote:
> I would like to ask where can I find more detailed info on > PyArg_ParseTuple function. > > I find the doc limited on the matter. > Mainly I am curious why the function requires an address of a pointer. > > I have issues in the following case: > in python > int jmax = 16 > > print type(jmax) > > <type 'int'> > > which is just all right > but following C code seems to be working > PyObject *jmax_o = NULL; > > if(!PyArg_ParseTuple(args, "i", &jmax_o)){ > goto error; > } > > but PyInt_Check(jmax_o) fails. > > I tried to debug and this is what i could see > > Program received signal SIGSEGV, Segmentation fault. > 0x00007ffff67a75bd in fprintf (self=<value optimized out>, args=(16,)) > at /usr/include/bits/stdio2.h:98 > 98 return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, > > so for some reason the jmax_o can not be converted to int. > > I use a x86_64 ubuntu and i suspect it could be because of 64 bits arch. > > Cheers > > Ioan Ferencik > PhD student > Aalto University > School of Science and Technology > Faculty Of Civil and Env. Engineering > Lahti Center > Tel: +358505122707 > The following is probably what you want: """ int jmax_o; if(!PyArg_ParseTuple(args, "i", &jmax_o)){ goto error; } """ PyArg_ParseTuple takes the arguments passed in, a format string, and then the resulting values from conversion. The "i" format, as you already knew, is for ints, and it converts your value into an *actual int* -- not a Python int. Because of that, you wouldn't need the PyInt_Check -- that's for checking PyObjects to see if they are Python ints.
-- http://mail.python.org/mailman/listinfo/python-list