检查 PyObject 是否为 None

问题描述 投票:0回答:2

我只是想检查我拥有的

PyObject
是否是
None
。我天真地期望从函数返回的任何
None
Pyobject *
都是 NULL 指针,但情况似乎并非如此。

那么:如何检查我的

PyObject *
是否指向
None
对象?

我知道周围有像

PyInt_Check(PyObject *)
这样的宏,但我找不到像
PyNone_Check
这样的宏。我以为我可以检查我的
PyObject
Py_None
之间的相等性,但事实证明我什至不知道如何与这个库进行相等比较。

python c++ nonetype pyobject
2个回答
32
投票

您可以使用

Py_None
直接与
==
进行比较:

if (obj == Py_None)

来自文档

注意,

PyTypeObject
None
并没有直接暴露在 Python/C API。 由于
None
是单例,因此测试对象身份 (在 C 中使用
==
)就足够了。
没有
PyNone_Check()
函数 同样的原因。


0
投票

对于任何可能遇到此问题的人,从 3.10 开始,现在有 Py_IsNone() 函数,文档指出:

测试一个对象是否是

None
单例,与 Python 中的
x is None
相同。

© www.soinside.com 2019 - 2024. All rights reserved.