On Thu, 13 Sep 2007 21:26:33 -0400, Carsten Haese wrote: > On Thu, 2007-09-13 at 18:05 -0700, Thierry Masson wrote: >> Hello, >> >> I'm trying to use the C API to extend Python. I've looked at various >> books and web sites (including the docs at python.org) and I can't get >> any of the samples to work. Below is a very minimalist example that >> I'm trying to get working and I was wondering if someone could tell me >> where I'm going wrong. It's probably something very obvious to those >> familiar with this technique. >>[snip...] >> The setup script builds the library OK, and I've verified that >> gtestmodule.so is getting created. But when I try to run a test script >> ( test.py, above) that uses the library, I get this error: >> >> Traceback (most recent call last): >> File "test.py", line 2, in ? >> import gtestmodule >> ImportError: ./gtestmodule.so: undefined symbol: PyBuildValue > > Your module C code uses an unknown function by the name of PyBuildValue. > The actual name of the function you mean is Py_BuildValue. > > HTH,
void get_python_exception(string& message, string& traceback) { GIL g; PyObject* type = NULL; PyObject* value = NULL; PyObject* trace = NULL; PyErr_Fetch(&type, &value, &trace); py_ref ref_type(type); py_ref ref_value(value); py_ref ref_trace(trace); py_ref name(PyString_FromString("traceback")); py_ref module(PyImport_Import(name.get())); if (module) { py_ref fun(PyObject_GetAttrString(module.get(), "format_exc")); if (fun) { PyErr_Restore(type, value, trace); ref_type.release(); ref_value.release(); ref_trace.release(); py_ref ret(PyObject_CallObject(fun.get(), NULL)); if (ret && PyString_Check(ret.get())) { char* str = PyString_AsString(ret.get()); message = str; traceback = "traceback not available"; return; } } } message = "message not available"; traceback = "traceback not available"; } str evaluates to "None", any ideas what gives here? I've also tried to call the traceback with a different function, such as PyObject_CallFunctionObjArgs but the result is still same. Thanks -- http://mail.python.org/mailman/listinfo/python-list