我有一个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出现错误时,我无法获取错误,应用程序崩溃:
抛出'boost :: python :: error_already_set'实例后调用终止
有没有一种方法可以缓存哪个文件或哪一行出现错误?
您可以使用eval
或exec
代替(文档参考)。
try {
bp::exec(script);
}
catch (bp::error_already_set) {
}
真正的问题是从异常对象获取错误信息。
通过PyErr_Print()
fromcatch
块将异常打印到stdout很容易,但是如果您需要更复杂的分析,则代码将变得很麻烦。
在catch
block中,您必须通过来获取异常信息,通过来进行PyErr_Fetch
归一化PyErr_NormalizeException
,例如,通过迭代回溯对象来分析调用堆栈。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句