在C

时间:2016-05-18 23:37:00

标签: python-2.7 dictionary nested python-c-api

如何访问从Python(通过scipy.weave)传递到C?

的嵌套词典

我正在开发一些复杂的代码,需要将Python代码与C代码连接起来。 python / scipy.weave代码将嵌套字典传递给C接口,如:

nested_dict = {'key1': dict_1, 'key2': dict_2, ...}

其中dict_1,dict_2,...是字典本身,例如:

dict_1 = {'kd1': val1, ...}

说我想访问val1 kd1中的dict_1scipy.weave代码调用C函数myfunc(PyObject* nested_dict),其中:

void myfunc(PyObject* nested_dict){
    PyObject* dict1 = PyDict_GetItemString(nested_dict,"key1");
    double val1 = PyFloat_AS_DOUBLE(PyDict_GetItemString(dict1,"kd1"));
}

不幸的是,第二行崩溃了。我无法理解为什么。

任何帮助都将不胜感激。

干杯, 莫里吉奥

1 个答案:

答案 0 :(得分:0)

崩溃了,因为我传递的嵌套字典没有密钥key1。一个简单的错误检查,如Ignacio在评论中所建议的那样,即

PyObject * dict_1 = PyDict_GetItemString(nested_dict,"key1");
if(dict_1==NULL){
    fprintf(stderr, "key1 is not a dictionary key\n");
    exit(-1);
}

帮助识别错误。否则,上面写的代码就达到了它的目的。