33 PyObject *ptype, *pvalue, *ptraceback;
34 PyErr_Fetch(&ptype, &pvalue, &ptraceback);
35 PyErr_NormalizeException(&ptype, &pvalue, &ptraceback);
42 py::object err_msg_obj(py::handle<>(PyObject_Str(pvalue)));
43 m_error_msg = py::extract<std::string>(err_msg_obj);
45 py::object err_repr_obj(py::handle<>(PyObject_Repr(pvalue)));
46 m_error_msg = py::extract<std::string>(err_repr_obj);
48 py::object err_msg_type(py::handle<>(PyObject_GetAttrString(ptype,
"__name__")));
53 for (
auto traceback =
m_error_traceback; traceback; traceback = traceback.attr(
"tb_next")) {
55 loc.
lineno = py::extract<long>(traceback.attr(
"tb_lineno"));
56 loc.
filename = py::extract<std::string>(traceback.attr(
"tb_frame").attr(
"f_code").attr(
"co_filename"));
57 loc.
funcname = py::extract<std::string>(traceback.attr(
"tb_frame").attr(
"f_code").attr(
"co_name"));