我有一个main.py,我用c ++加载并用
运行void runscript ( std::string script )
{
try {
PyRun_SimpleStringFlags ( script.c_str() ,NULL );
}
catch ( const boost::python::error_already_set& ) {
std::cout<<"test error"<<std::endl;
}
}
main.py有一行:
import test
(即test.py)
位于main.py内的同一文件夹中。
当test.py有错误时,我无法解决我得到的错误,应用程序崩溃:
在抛出&#39; boost :: python :: error_already_set&#39;
的实例后终止调用有没有办法缓存哪个文件或哪一行出错?
答案 0 :(得分:0)
您可以改为使用eval
或exec
(doc reference)。
try {
bp::exec(script);
}
catch (bp::error_already_set) {
}
真正的问题是从异常对象获取错误信息。
PyErr_Print()
阻止来自catch
块的stdout异常很容易,但如果需要更复杂的分析,代码就会变得很麻烦。
在catch
块中,您必须通过PyErr_Fetch
获取异常信息,并按PyErr_NormalizeException
进行规范化,然后通过迭代回溯对象来分析调用堆栈。