如何在Python3中获取PyObject的字符串表示形式?

6

我正在调试Python源代码(CPython 3.4)。我收到了一个PyObject*。我想要使用printf打印它。

例如(来自Python 3.4源代码中的Objects/floatobject.c):

PyObject *o_ndigits = NULL;
Py_ssize_t ndigits;

x = PyFloat_AsDouble(v);
if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
    return NULL;

我该如何使用printf输出一定位数的数字?这个问题与Python:获取PyObject的字符串表示形式?几乎相同,不过是针对Python3的。使用原始解决方案,我遇到了"undefined reference to PyString_AsString"错误。
1个回答

4

PyObject_ReprPyObject_ASCII都返回对象的unicode str表示。如果你的终端不使用UTF-8编码,你可能需要使用ASCII转义表示。通过PyUnicode_AsUTF8PyUnicode_AsUTF8AndSize获取多字节字符串。在3.3中的新实现缓存了UTF-8字节串,因此在打印后不要释放它。

对于PyString_AsString,在3.x的bytes类型中成为PyBytes_AsStringPyBytes_AS_STRING


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接