如何访问从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_1
。 scipy.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"));
}
不幸的是,第二行崩溃了。我无法理解为什么。
任何帮助都将不胜感激。
干杯, 莫里吉奥
答案 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);
}
帮助识别错误。否则,上面写的代码就达到了它的目的。