Python - 打印回溯
CPython - print traceback
如何在 CPython 中将回溯对象转换为其字符串表示形式?
我试过了,但输出不是很有用。
PyObject *type, *value, *traceback;
PyErr_Fetch(&type, &value, &traceback);
PyObject* strTrace = PyObject_Repr(traceback);
pyStrTrace = PyUnicode_AsEncodedString(strTrace, "utf-8", "strict");
Py_XDECREF(strTrace);
const char* sTrace = PyBytes_AS_STRING(pyStrTrace);
sTrace
的内容:
<traceback object at 0x000002594A5CC598>
一条评论建议导入 traceback
python 模块,这肯定会很好用,但我更喜欢仅使用 C++ 的解决方案,所以我想出了这个片段。希望有人觉得它有用。
if (PyTraceBack_Check(traceback))
{
PyTracebackObject* traceRoot = (PyTracebackObject*)traceback;
PyTracebackObject* pTrace = traceRoot;
while (pTrace != NULL)
{
PyFrameObject* frame = pTrace->tb_frame;
PyCodeObject* code = frame->f_code;
int lineNr = PyFrame_GetLineNumber(frame);
const char *sCodeName = PyUnicode_AsUTF8(code->co_name);
const char *sFileName = PyUnicode_AsUTF8(code->co_filename);
printf("at %s (%s:%d); ", sCodeName, sFileName, lineNr);
pTrace = pTrace->tb_next;
}
}
如何在 CPython 中将回溯对象转换为其字符串表示形式? 我试过了,但输出不是很有用。
PyObject *type, *value, *traceback;
PyErr_Fetch(&type, &value, &traceback);
PyObject* strTrace = PyObject_Repr(traceback);
pyStrTrace = PyUnicode_AsEncodedString(strTrace, "utf-8", "strict");
Py_XDECREF(strTrace);
const char* sTrace = PyBytes_AS_STRING(pyStrTrace);
sTrace
的内容:
<traceback object at 0x000002594A5CC598>
一条评论建议导入 traceback
python 模块,这肯定会很好用,但我更喜欢仅使用 C++ 的解决方案,所以我想出了这个片段。希望有人觉得它有用。
if (PyTraceBack_Check(traceback))
{
PyTracebackObject* traceRoot = (PyTracebackObject*)traceback;
PyTracebackObject* pTrace = traceRoot;
while (pTrace != NULL)
{
PyFrameObject* frame = pTrace->tb_frame;
PyCodeObject* code = frame->f_code;
int lineNr = PyFrame_GetLineNumber(frame);
const char *sCodeName = PyUnicode_AsUTF8(code->co_name);
const char *sFileName = PyUnicode_AsUTF8(code->co_filename);
printf("at %s (%s:%d); ", sCodeName, sFileName, lineNr);
pTrace = pTrace->tb_next;
}
}