我正在调试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"
错误。
答案 0 :(得分:4)
PyObject_Repr
和PyObject_ASCII
都返回对象的unicode str
表示。如果您的终端不使用UTF-8,您可能需要ASCII转义表示。获取包含PyUnicode_AsUTF8
或PyUnicode_AsUTF8AndSize
的多字节字符串。 3.3中的新实现缓存了UTF-8字节字符串,因此在打印后不要解除分配。
至于PyString_AsString
,对于3.x PyBytes_AsString
类型,它变为PyBytes_AS_STRING
或bytes
。