parsing a tuple in embedded python

Discussion in 'Python' started by jenkins.justin@gmail.com, Oct 30, 2005.

  1. Guest

    I am returning a tuple from my python method and am stuck trying to
    figure out how to read it into a C array using PyArg_Parse.
    My C Code:
    int array[3];
    PyArg_Parse(return, "(iii)", &array);

    My Python Code:
    mytuple = (1,2,3)
    return mytuple

    That gives me a segmentation fault. What am I doing wrong?
    , Oct 30, 2005
    #1
    1. Advertising

  2. wrote:

    > I am returning a tuple from my python method and am stuck trying to
    > figure out how to read it into a C array using PyArg_Parse.
    > My C Code:
    > int array[3];
    > PyArg_Parse(return, "(iii)", &array);
    >
    > My Python Code:
    > mytuple = (1,2,3)
    > return mytuple
    >
    > That gives me a segmentation fault. What am I doing wrong?


    you're not providing enough arguments; "iii" means three pointers, not
    one. try:

    PyArg_Parse(return, "(iii)", array, array+1, array+2)

    instead. or, if you prefer maximum clarity:

    PyArg_Parse(return, "(iii)", &array[0], &array[1], &array[2])

    (I assume you left out the error handling code; ignoring the return value
    from PyArg_Parse is not a good idea)

    </F>
    Fredrik Lundh, Oct 30, 2005
    #2
    1. Advertising

  3. Guest

    Thanks Fredrik. Yes, I see now how the function works. I'm new to
    Python and the book I'm studying out of wasn't too explicit in how to
    handle arrays. I've changed the code to what you suggested, but
    strangely enough nothing got read into my array. If I return a single
    integer from my Python method, I get the expected return using:
    PyArg_Parse(return, "i", &integer);
    But,
    PyArg_Parse(return, "(iii)", array, array+1, array+2)
    and
    PyArg_Parse(return, "(iii)", &array[0], &array[1], &array[2])
    does not alter "array" at all. Any ideas? Thanks



    Fredrik Lundh wrote:
    > wrote:
    >
    > > I am returning a tuple from my python method and am stuck trying to
    > > figure out how to read it into a C array using PyArg_Parse.
    > > My C Code:
    > > int array[3];
    > > PyArg_Parse(return, "(iii)", &array);
    > >
    > > My Python Code:
    > > mytuple = (1,2,3)
    > > return mytuple
    > >
    > > That gives me a segmentation fault. What am I doing wrong?

    >
    > you're not providing enough arguments; "iii" means three pointers, not
    > one. try:
    >
    > PyArg_Parse(return, "(iii)", array, array+1, array+2)
    >
    > instead. or, if you prefer maximum clarity:
    >
    > PyArg_Parse(return, "(iii)", &array[0], &array[1], &array[2])
    >
    > (I assume you left out the error handling code; ignoring the return value
    > from PyArg_Parse is not a good idea)
    >
    > </F>
    , Oct 30, 2005
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Michal Mikolajczyk
    Replies:
    1
    Views:
    789
    Larry Bates
    Apr 20, 2004
  2. Jeff Epler
    Replies:
    0
    Views:
    918
    Jeff Epler
    Apr 20, 2004
  3. Bill Scherer
    Replies:
    0
    Views:
    599
    Bill Scherer
    Apr 20, 2004
  4. Gregor Horvath

    Why tuple with one item is no tuple

    Gregor Horvath, Mar 15, 2005, in forum: Python
    Replies:
    37
    Views:
    785
    Antoon Pardon
    Mar 30, 2005
  5. Steve
    Replies:
    1
    Views:
    941
    Fredrik Lundh
    Dec 13, 2005
Loading...

Share This Page