python - boost python 错误消息 :terminate called after throwing an instance of 'boost::python::error_already_set'

标签 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 出现错误时,我无法缓存我收到的错误,应用程序崩溃:

在抛出“boost::python::error_already_set”实例后调用终止

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

最佳答案

您可以使用 evalexec (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/

相关文章:

python - 如何在 SQLAlchemy ORM 中创建跨不同模式的关系?

python - 如何在 groupby 中实现类似于 `value_counts()` 的东西?

c++ - 如何检查进程是否在 Red Hat Linux 上运行?

c++ - 相同的代码在 Visual Studio 2010 和代码块 10.05 中给出不同的结果

c++ - 将一个字符串与另一个字符串进行比较的最佳方法是什么?

boost - 新版本的 BJam 是否支持向后兼容旧版本的 Boost?

C++:从带孔的多边形中获取简单多边形的列表

python - 如何确保 Jinja 自定义标签只输出一次?

c++ - 奇怪的异常抛出 - 分配 : Operation not permitted

python - 使用 key 合并两个 Pandas 系列