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

时间:2013-12-09 07:16:05

标签: python python-3.x python-c-api

我正在调试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 o_ndigits?它与这个问题几乎相同:Python: get string representation of PyObject?,但对于Python3。使用原始解决方案,我收到"undefined reference to PyString_AsString"错误。

1 个答案:

答案 0 :(得分:4)

PyObject_ReprPyObject_ASCII都返回对象的unicode str表示。如果您的终端不使用UTF-8,您可能需要ASCII转义表示。获取包含PyUnicode_AsUTF8PyUnicode_AsUTF8AndSize的多字节字符串。 3.3中的新实现缓存了UTF-8字节字符串,因此在打印后不要解除分配。

至于PyString_AsString,对于3.x PyBytes_AsString类型,它变为PyBytes_AS_STRINGbytes

相关问题