Boost Python 实现C调用python错误解决方法
2009-10-23 15:29
1091 查看
由于Boost Python跟不上Python版本更新,如下方法调用可能产生TypeError: 'NoneType' object does not support item assignment异常。
Boost Python文档中例子可能产生异常。
Py_Initialize();
object main_module = import("__main__");
object main_dict = main_module.attr("__dict__");
try{
object result = exec("result = 5 + 5",main_dict);
int five_squared = extract<int>(main_dict["result"]);
cout<<"extract value : "<<five_squared<<endl;
cin>>ij;
}
catch(error_already_set){
PyErr_Print();
cin>>ij;
}
可以如下方法解决
Py_Initialize();
object main_module = import("__main__");
object main_dict = main_module.attr("__dict__");
try{
handle<> ignored((PyRun_String(
"result = 5 ** 2"
, Py_file_input
, main_dict.ptr()
, main_dict.ptr())
));
int five_squared = extract<int>(main_dict["result"]);
cout<<"extract value : "<<five_squared<<endl;
cin>>ij;
}
catch(error_already_set){
PyErr_Print();
cin>>ij;
}
Boost Python中执行表达式函数也可以正常运行。
Py_Initialize();
object main_module = import("__main__");
object main_dict = main_module.attr("__dict__");
try{
object result = eval("5 + 5",main_dict);
int five_squared = extract<int>(result);
cout<<"extract value : "<<five_squared<<endl;
cin>>ij;
}
catch(error_already_set){
PyErr_Print();
cin>>ij;
}
Boost Python文档中例子可能产生异常。
Py_Initialize();
object main_module = import("__main__");
object main_dict = main_module.attr("__dict__");
try{
object result = exec("result = 5 + 5",main_dict);
int five_squared = extract<int>(main_dict["result"]);
cout<<"extract value : "<<five_squared<<endl;
cin>>ij;
}
catch(error_already_set){
PyErr_Print();
cin>>ij;
}
可以如下方法解决
Py_Initialize();
object main_module = import("__main__");
object main_dict = main_module.attr("__dict__");
try{
handle<> ignored((PyRun_String(
"result = 5 ** 2"
, Py_file_input
, main_dict.ptr()
, main_dict.ptr())
));
int five_squared = extract<int>(main_dict["result"]);
cout<<"extract value : "<<five_squared<<endl;
cin>>ij;
}
catch(error_already_set){
PyErr_Print();
cin>>ij;
}
Boost Python中执行表达式函数也可以正常运行。
Py_Initialize();
object main_module = import("__main__");
object main_dict = main_module.attr("__dict__");
try{
object result = eval("5 + 5",main_dict);
int five_squared = extract<int>(result);
cout<<"extract value : "<<five_squared<<endl;
cin>>ij;
}
catch(error_already_set){
PyErr_Print();
cin>>ij;
}
相关文章推荐
- python调用ftp.cwd('xx/xx') 产生错误:550 Failed to change directoryd的解决方法
- 从C调用Python脚本unableto load the file system codec ImportError错误解决方法
- python调用caffe接口进行classify时提示Mean shape incompatible with input shape错误的解决方法
- c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法
- python调用caffe接口进行classify时提示Mean shape incompatible with input shape错误的解决方法
- c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法
- python调用caffe接口进行classify时提示Mean shape incompatible with input shape错误的解决方法
- c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法
- Python实现子类调用父类的方法
- "对COM 组件的调用返回了错误 HRESULT E_FAIL"的解决方法
- python错误TypeError: 'module' object is not callable 的解决方法
- python错误 ImportError: No module named setuptools 解决方法
- c++ mk文件出错Jni调用产生java.lang.UnsatisfiedLinkError错误解决方法
- WINDOWS安装python3.X遇到的错误解决方法
- Python默认编码错误SyntaxError: Non-ASCII character '\xe5'之解决方法
- IIS7.5 HTTP 错误 500 调用loadlibraryex失败的解决方法
- Messages:This method: edit for action XXX is not allowed!-Struts2.5动态方法调用错误解决方法
- 我遇到的python错误及解决方法
- web项目调用arcgis api for JS离线包报“https://[HOSTNAME_AND_PATH_TO_JSAPI]dojo/...”错误解决方法
- Python通过属性手段实现只允许调用一次的方法