24 lines
604 B
C++
24 lines
604 B
C++
|
#include "python_utils.hpp"
|
||
|
|
||
|
std::string extractException()
|
||
|
{
|
||
|
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);
|
||
|
}
|
||
|
}
|