always getting 'None' return value from PyObject_CallObject

John Machin sjmachin at
Mon Mar 24 01:29:13 CET 2008

On Mar 24, 10:43 am, Gal Aviel <galav... at> wrote:
> Hello all,
> Kinda desperate over here .. Any help would be greatly appreciated !
> I'm trying to embed a Python interpreter inside a Verilog simulator as a
> SystemVerilog DPI application. The python side implements a few SV exported
> tasks. I've got a thin C shared library as the dpi app; all it does it get the
> task arguments from the simulator and hand those to the Python side using the
> Python C API.
> I followed '5.3 Pure Embedding' under Python 2.5 documentation very closely.
> When calling a function defined in my module, the function executes Ok - it sees
> the correct arguments being passed from C, and executes 100% - only the return
> value is always 'None' (I tried returning a simple integer like '5' which
> doesn't work).
> Any ideas?

So you are saying that your Python functions does:
   return 5
[are you sure it's not falling off the end and thus implicitly
returning None?]
but PyObject_CallObject transmogrifies that into the Python object
None -- or do you mean a C NULL pointer?

It might be a good idea if you showed us the exact C code that you are
using instead of this snippet from the manual:

            pValue = PyObject_CallObject(pFunc, pArgs);
            if (pValue != NULL) {
                printf("Result of call: %ld\n", PyInt_AsLong(pValue));
            else {
                fprintf(stderr,"Call failed\n");
                return 1;
including the part where you demonstrate that the returned pointer
points to the None object.

It might be a good idea if you showed us the minimal Python function
that exhibits this behaviour with your C code ... does it happen with:
   def myfunc():
      return 5
And what version of Python on what platform?

More information about the Python-list mailing list