boost python错误消息:在抛出' boost :: python :: error_already_set'的实例后调用terminate。

时间:2014-11-13 06:25:57

标签: python c++ boost

我有一个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;

的实例后终止调用

有没有办法缓存哪个文件或哪一行出错?

1 个答案:

答案 0 :(得分:0)

您可以改为使用evalexecdoc reference)。

try {
    bp::exec(script);
}
catch (bp::error_already_set) {
}

真正的问题是从异常对象获取错误信息。

PyErr_Print()阻止来自catch块的stdout异常很容易,但如果需要更复杂的分析,代码就会变得很麻烦。

catch块中,您必须通过PyErr_Fetch获取异常信息,并按PyErr_NormalizeException进行规范化,然后通过迭代回溯对象来分析调用堆栈。