如何在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>
1条答案
按热度按时间dnph8jn41#
一条评论建议导入
traceback
python模块,这肯定会工作得很好,但我更喜欢C++的解决方案,所以我想出了这个片段。希望有人会觉得有用。首先包括Python的
<frameobject.h>
从Python 3.11开始,
frame->f_code
不再可用(PyFrameObject被私有化)。更新日志中建议使用PyFrame_GetCode(frame)
。同样,这也消除了包含
<frameobject.h>
的需要为了向后兼容,你可以自己实现这个函数: