PyObject_GetAttrString failing when getting a function pointer fr om PyObject* returned by Py_CompileString

sndive at gmail.com sndive at gmail.com
Tue Nov 20 12:13:03 EST 2007


On Nov 20, 3:27 am, "Borse, Ganesh" <ganesh.bo... at credit-suisse.com>
wrote:
> Hi,
>
> My following code is failing with an error of "isSizeSmall not function or callable"
>
> //---------------------------------------------------
> char szExpr[2048];
> memset(szExpr,'\0',sizeof(szExpr));
> sprintf(szExpr,"def isSizeSmall(size,vol,ADV,prod):\n  if ( (size < 1000) & (vol < (0.001 * ADV)) & (prod==\"Stock\")): return 100\n  else: return 11\n\n\n");
>
> PyObject* pyco = Py_CompileString(szExpr,"<stdin>", Py_file_input);
>
> // Get a pointer to this function
> char funcname[56];
> memset(funcname,'\0',sizeof(funcname));
> sprintf(funcname,"isSizeSmall");
>
> PyObject* func = PyObject_GetAttrString(pyco,funcname);
> if(!func || !PyCallable_Check(func))
>    printf("%s not function or callable\n");
> //---------------------------------------------------
>
> In above case, Py_CompileString parses & compiles the code successfully.
>
> Can we not use the "PyObject*" returned by Py_CompileString as input to PyObject_GetAttrString?
> What could be wrong?
>
per documentation
compile string returns None when you use Py_file_input

> I want to use this function pointer returned by PyObject_GetAttrString as input to PyObject_CallObject.
> Can I use the "PyObject*" returned by Py_CompileString directly as is in call to PyObject_CallObject?
>
not with Py_file_input



More information about the Python-list mailing list