Getting System error with PyModule_AddIntConstant funtion

Philip Semanchuk philip at semanchuk.com
Tue May 18 11:50:46 EDT 2010


On May 18, 2010, at 11:41 AM, MathanK wrote:

> Following is a Python C api which runs properly without  
> PyModule_AddIntConstant function.
>
>
> But when PyModule_AddIntConstant() function is used, getting the  
> following error when i call
> c. path("test call");
> " SystemError: NULL result without error in PyObject_Call "

Hi Mathan,
You're not checking the return code from PyModule_Create(). Is it  
returning NULL?

Also, there's a list specific to Python's C API. You might get a  
better response to your question there:
http://mail.python.org/mailman/listinfo/capi-sig


bye
Philip


>
>
> Python C api- c.c
>
>
> int test(int a){
>     return (2*a+a);
> }
>
>
> PyObject* dict = NULL;
>
>
> static PyObject* path(PyObject* self, PyObject* args) {
>     char *cpath;
>     PyUnicodeObject *path;
>     PyUnicodeObject *test;
>
>
>     if (!PyArg_ParseTuple(args, "s", &path))
>        return NULL;
>     cpath = (char *)path;
>     test = (PyUnicodeObject*)(cpath);
>     PyObject *testDict = PyDict_New();
>     int testVal = PyDict_SetItem(testDict, (PyObject  
> *)PyUnicode_FromString(cpath), (PyObject  
> *)PyUnicode_FromString(cpath));
>
>     return Py_BuildValue("s", test);
> }
> static PyObject* c(PyObject* self, PyObject* args) {
>
>     int a;
>     int result;
>    if(!PyArg_ParseTuple(args, "i", &a))
>         return NULL;
>     result = test(a);
>     return Py_BuildValue("i", result);
>
> }
>
>
> static PyMethodDef cmethods[] = {
>     {"c", c, METH_VARARGS, "watch"},
>     {"path", path, METH_VARARGS, "test"},
>     {NULL, NULL, 0, NULL},
> };
>
>
> static struct PyModuleDef c_Module = {
>     PyModuleDef_HEAD_INIT,
>     "c",
>     (
>   "Interface."
>     ),
>     -1,
>     cmethods
> };
>
>
> PyMODINIT_FUNC PyInit_c(void) {
>
>     PyObject* obj = PyModule_Create(&c_Module);
>     long lon1 = 0;
>     PyModule_AddIntConstant(obj, "test", lon1);
>
> }
>
>
> int main(int argc, wchar_t *argv[])
> {
>     PyImport_AppendInittab("c", PyInit_c);
>     Py_SetProgramName(argv[0]);
>     Py_Initialize();
>     PyImport_ImportModule("c");
>     return 0;
> }
> -- 
> http://mail.python.org/mailman/listinfo/python-list




More information about the Python-list mailing list