Python学习:使用boost c++嵌入python,获取异常信息输出到字符串

       使用boost::python,很容易在c++嵌入python,不需要关心python那些c api的复杂性。但有一个问题是python编译出错信息或者异常信息不能重定向字符串里,打印出来,python错误信息默认是输出到stderr的,是基于命令行的。通过文件重定向有点麻烦,需要写一些python脚本,也不直观。通过很长的摸索和搜索,终于找到了下面的方法。

       通过以下c++代码,可以实现pyhon错误信息输出到c++字符串。

std::string GetPythonErrorInfo(void)
{ 
    ​using namespace boost::python;                                
                                                                
    PyObject *exc,*val,*tb;                                       
    PyErr_Fetch(&exc,&val,&tb);                                   
    PyErr_NormalizeException(&exc,&val,&tb);                      
    handle<> hexc(exc),hval(allow_null(val)),htb(allow_null(tb)); 
    if(!hval)                                                     
    {                                                             
      ​  return extract<std::string>(str(hexc));                     
    }                                                             
    else                                                          
    {                                                             
         object traceback(import("traceback"));                      
         object format_exception(traceback.attr("format_exception"));
         object formatted_list(format_exception(hexc,hval,htb));     
         object formatted(str("").join(formatted_list));             
         return extract<std::string>(formatted);                     
    }                                                      
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值