如何在嵌入式 Python 脚本的错误消息中打印 PyObject 的类型

How can I print the type of a PyObject in an error message for an embedded Python script?

本文关键字:消息 打印 PyObject 类型 错误 嵌入式 Python 脚本      更新时间:2023-10-16

我的C++代码中有这个检查:

if (1 != PyString_Check( key ))

我想获得它实际类型的"char*",以便提供更有用的错误消息。使用 Python 的 C API,我将如何做到这一点?

PyTypeObject* type = key->ob_type;
const char* p = type->tp_name;
std::cout << "My type is " << p << std::endl;

从 Python 2.6 开始,有一个宏 Py_TYPE ,应该用来访问PythonObject的类型对象。然后,您可以获取包含该类型的完全限定名称的tp_name字段。这意味着对象obj的类型可以作为 C 字符串获取,如下所示:

const char* p = Py_TYPE(obj)->tp_name;