我有一个 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
(doc reference)。
try {
bp::exec(script);
}
catch (bp::error_already_set) {
}
真正的问题是从异常对象中获取错误信息。
通过 catch
block 中的 PyErr_Print()
将异常打印到标准输出很容易,但是如果您需要更复杂的分析,代码会变得很麻烦。
在catch
block 中,您必须通过PyErr_Fetch
获取异常信息。 , 通过 PyErr_NormalizeException
归一化比如说,通过遍历回溯对象来分析调用堆栈。
关于python - boost python 错误消息 :terminate called after throwing an instance of 'boost::python::error_already_set' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26902619/