2013-12-09 53 views
4

我正在调试Python源代码(CPython 3.4)。我收到一个PyObject *。我想printf吧。如何在Python3中获取PyObject的字符串表示形式?

例如(从3.4的Python源代码对象/ 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"错误。

回答

3

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

至于PyString_AsString,那变成PyBytes_AsStringPyBytes_AS_STRING为3.x bytes类型。

相关问题