如何将发生的 Python 异常转换并保存到 std::string 或 wstring 中?这是我当前的代码:
String ScriptErrorHandler::the_error()
{
if(PyErr_Occurred())
{
PyObject *error_type, *the_error, *the_traceback, *py_error_string, *py_error_unicode;
PyErr_Fetch(&error_type, &the_error, &the_traceback);
PyErr_NormalizeException(&error_type, &the_error, &the_traceback);
if((error_type != NULL))
{
String the_error_string, the_traceback_string;
if (the_error != NULL)
{
py_error_string = PyObject_Str(the_error);
py_error_unicode = PyUnicode_FromObject(py_error_string);
const char* char_string = PyUnicode_AS_DATA(py_error_unicode);
auto char_length = PyUnicode_GET_DATA_SIZE(py_error_string);
the_error_string = String(char_string, char_length);
}
if(the_traceback != NULL)
auto the_traceback_string = PyBytes_AsString(the_traceback);
String str_error(the_error_string);
String str_traceback(the_traceback_string);
String message(str_error + "\n Traceback: " + str_traceback);
Py_XDECREF(error_type);
Py_XDECREF(the_error);
Py_XDECREF(the_traceback);
return message;
}
}
return StringUtil::BLANK;
}
调试显示 the_error_string 仅包含“i”,它是错误消息的第一个字符,应该类似于“invalid ..blabla”。
我究竟做错了什么?
我正在使用 Python 3.1