首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CPython -打印回溯

CPython -打印回溯
EN

Stack Overflow用户
提问于 2019-06-04 00:03:27
回答 1查看 123关注 0票数 0

如何将回溯对象转换为其在CPython中的字符串表示?我试过了,但是输出不是很有用。

代码语言:javascript
复制
    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的内容

代码语言:javascript
复制
 <traceback object at 0x000002594A5CC598>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-10 15:45:39

一条评论建议导入traceback python模块,这肯定会很好地工作,但我更喜欢只使用C++的解决方案,所以我想出了这个代码片段。希望有人会发现它很有用。

代码语言:javascript
复制
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;
    }        
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56430908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档