2014-10-12 3 views
0

Я пишу модуль Python с использованием API расширения C и пытаюсь передать длинную переменную из Python в функцию C, а затем из нее получают исходный PyLongObject, используемый для представления этой переменной.PyArg_Parse возвращающий объект кадра вместо PyLongObject

Я использую функцию PyArg_Parse для синтаксического анализа переменной в необработанном C-указателе. Я ожидаю, что PyObject вернется к типу PyLongObject, однако всякий раз, когда я проверяю значение typemame для проанализированного объекта, он всегда имеет тип 'frame'? Что мне не хватает?

static PyObject* test(PyObject *self, PyObject *args) 
{ 
    PyObject *num; 

    if(!PyArg_Parse(args, "0", &num)) 
    { 
     //ERROR YO 
    } 

    printf("\n%s\n", num->ob_type->tp_name); 

    Py_RETURN_NONE; 
} 

ответ

1

Похоже, что вы передаете недопустимую спецификацию формата аргумента (никогда не видели 0 (ноль)). В результате вы получаете исключение, с которым вы не имеете дело, но относите возвращаемое значение в «num», как если бы оно было успешным. Кроме того, вы используете устаревшую функцию для анализа аргументов.

+0

Ах! Спасибо! Оказалось, что я неправильно читал документацию 'O (object) [PyObject *]' был 0, а не O. Правильно обработав мои ошибки вместо лени, я понял это, спасибо! – ali2992