检查 PyObject 是不是为 None

Posted

技术标签:

【中文标题】检查 PyObject 是不是为 None【英文标题】:Check if PyObject is None检查 PyObject 是否为 None 【发布时间】:2015-06-26 06:58:02 【问题描述】:

我只想检查我拥有的PyObject 是否为None。我天真地以为从函数返回的任何 None Pyobject * 都是 NULL 指针,但事实并非如此。

那么:如何检查我的 PyObject * 是否指向 None 对象?

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

【问题讨论】:

【参考方案1】:

您可以直接使用==Py_None 进行比较:

if (obj == Py_None)

来自docs:

请注意,NonePyTypeObject 不会直接暴露在 Python/C API。 由于None 是一个单例,测试对象身份 (在 C 中使用 ==)就足够了。 没有 PyNone_Check() 函数 同样的原因。

【讨论】:

以上是关于检查 PyObject 是不是为 None的主要内容,如果未能解决你的问题,请参考以下文章

确定 PyObject* 是不是为 PyLongDoubleScalarObject (numpy)

如何将 C++ 对象转换为 PyObject?

检查 PyObjects C 类型

在rust-cpython中将Rust结构转换为PyObject

PyObject_CallMethod 在调用 python 方法时有时会出现段错误

『Python CoolBook』C扩展库_其六_从C语言中调用Python代码