diff --git a/include/pybind11/cast.h b/include/pybind11/cast.h index ddc1890c1..adf7ea99f 100644 --- a/include/pybind11/cast.h +++ b/include/pybind11/cast.h @@ -127,6 +127,23 @@ PYBIND11_NOINLINE inline std::string error_string() { if (scope.value) errorString += (std::string) handle(scope.value).str(); + PyErr_NormalizeException(&scope.type, &scope.value, &scope.trace); + + if (scope.trace) { + PyFrameObject *frame = ((PyTracebackObject *) scope.trace)->tb_frame; + if (frame) { + errorString += "\n\nAt:\n"; + while (frame) { + int lineno = PyFrame_GetLineNumber(frame); + errorString += + " " + handle(frame->f_code->co_filename).cast() + + "(" + std::to_string(lineno) + "): " + + handle(frame->f_code->co_name).cast() + "\n"; + frame = frame->f_back; + } + } + } + return errorString; }