2014-10-12 2 views
0

저는 C 확장 API를 사용하여 Python 모듈을 작성 중이며 Python에서 Long 함수를 C 함수로 전달한 다음이 변수를 나타내는 데 사용 된 원시 PyLongObject를 얻으려고합니다.PyArg_Parse는 PyLongObject 대신 프레임 객체를 반환합니다.

저는 PyArg_Parse 함수를 사용하여 변수를 원시 C 포인터로 구문 분석하고 있습니다. PyObject가 PyLongObject 유형으로 반환 될 것으로 기대하고 있습니다. 그러나 구문 분석 된 객체의 typename 값을 검사 할 때마다 항상 '프레임'유형이 필요합니까? 내가 뭘 놓치고 있니?

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 (객체) [PyObject *]' 의 문서를 O가 아닌 0으로 잘못 읽었습니다. 게으름 대신 적절하게 처리하면 오류가 발생했습니다. 감사합니다! – ali2992

관련 문제