Python在打印回溯时引发异常
环境:Python 3.5和Boost 1.61 我有一个打印python回溯的函数。它依赖于以下机制:Python在打印回溯时引发异常,python,c++,python-3.x,boost,traceback,Python,C++,Python 3.x,Boost,Traceback,环境:Python 3.5和Boost 1.61 我有一个打印python回溯的函数。它依赖于以下机制: traceback.format_异常(exttype,value,traceback); 这就是函数本身: std::string pythonTraceBack() { 使用名称空间boost::python; PyObject*exType; PyObject*值; PyObject*回溯; PyErr_获取(&exType,&value,&traceBack); 对象oExType
traceback.format_异常(exttype,value,traceback);
这就是函数本身:
std::string pythonTraceBack()
{
使用名称空间boost::python;
PyObject*exType;
PyObject*值;
PyObject*回溯;
PyErr_获取(&exType,&value,&traceBack);
对象oExType(句柄(借用的(extType));
对象oValue(句柄(借来的值));
对象回溯(句柄(借用(回溯));
// 1.
对象行=导入(“回溯”).attr(“格式例外”)(oExType,oValue,oTraceBack);
std::字符串结果;
对于(int i=0;i
objectlines=import(“traceback”).attr(“format_exc”)();
似乎可以解决问题,但输出不是回溯
oExType、oValue、oTraceBack
,但这会在编译过程中导致转换错误
最小、完整、可验证的示例:
#include <iostream>
#include <Python.h>
#include <boost/python.hpp>
std::string pythonTraceBack() { /* ... */ }
int main()
{
using namespace boost::python;
Py_Initialize();
try
{
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
object ignored = exec("print(1/0)", main_namespace);
}
catch (error_already_set const& e)
{
std::string error = pythonTraceBack();
std::cout << "Traceback: " << std::endl << error;
}
// Py_Finalize();
return 0;
}
#包括
#包括
#包括
std::string pythonTraceBack(){/*…*/}
int main()
{
使用名称空间boost::python;
Py_初始化();
尝试
{
对象主模块=导入(“\uuuu主模块”);
object main_namespace=main_module.attr(“uu dict_uu”);
忽略对象=exec(“打印(1/0)”,主名称空间);
}
捕获(错误\u已\u设置常量(&e)
{
std::string error=pythonTraceBack();
std::我想最好包含一个extractedexception()
给定的异常似乎有效。您的代码缺少对PyErr\u NormalizeException
@J.J.Hakala的调用。谢谢。在PyErr\u Fetch
之后添加了PyErr\u NormalizeException
后,它解决了我的问题。