Python:获取 PyObject 的字符串表示形式?

新手上路,请多包涵

我有一个 C python 扩展,我想打印出一些诊断信息。

我收到一个字符串作为 PyObject*

获取此对象的字符串表示形式以使其可用作 const char * 的规范方法是什么?

原文由 Mark Harrison 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 855
2 个回答

Use PyObject_Repr (to mimic Python’s repr function) or PyObject_Str (to mimic str ), and then call PyString_AsString 获得 char * (您可以,通常应该将其用作 const char* ,例如:

 PyObject* objectsRepresentation = PyObject_Repr(yourObject);
const char* s = PyString_AsString(objectsRepresentation);

此方法适用于任何 PyObject 。如果您绝对确定 yourObject 是一个 Python 字符串而不是其他东西,例如数字,您可以跳过第一行并执行以下操作:

 const char* s = PyString_AsString(yourObject);

原文由 piokuc 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用的是 Python 3,则以下是正确答案:

 static void reprint(PyObject *obj) {
    PyObject* repr = PyObject_Repr(obj);
    PyObject* str = PyUnicode_AsEncodedString(repr, "utf-8", "~E~");
    const char *bytes = PyBytes_AS_STRING(str);

    printf("REPR: %s\n", bytes);

    Py_XDECREF(repr);
    Py_XDECREF(str);
}

原文由 Romuald Brunet 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题