c++内嵌python脚本,boost::python::error_already_set
话不多说代码直接贴上
int main()
{
Py_Initialize();
//引入__main__ 作用域
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
try
{
std::cout<<"will -1 end"<<std::endl;
object simple = exec_file("simple.py",main_namespace, main_namespace);
std::cout<<"will 0 end"<<std::endl;
object serverInfo = main_namespace["serverInfo"];
std::cout<<"will 1 end"<<std::endl;
std::string ipStr = extract<std::string>(serverInfo("Server","ip"));
std::cout<<"will 2 end"<<std::endl;
std::cout << "Python get ip: " << ipStr <<std::endl;
}
catch (boost::python::error_already_set)
{
PyErr_Print();
boost::python::object sys(
boost::python::handle<>(PyImport_ImportModule("sys"))
);
boost::python::object err = sys.attr("stderr");
std::string err_text = boost::python::extract<std::string>(err.attr("getvalue")());
}
return 0;
}
如果simple.py脚本内有语法错误的话, 会抛出异常, 异常信息打印出来了。但是程序是会崩溃(terminate called after throwing an instance of 'boost::python::error_already_set', 已放弃), 如何让程序不崩溃呢?就是说脚本有错误时不要让c++程序宕掉。有哪位混合编程高手讲解下。