Python - 如何检查弱引用是否仍然可用

7 投票
3 回答
1379 浏览
提问于 2025-04-15 23:40

我正在把一些弱引用从Python传递到C++类中,但C++的析构函数在真实对象已经不存在的时候还试图访问这些引用,这显然会导致崩溃...

有没有什么Python的C/API方法可以检查一下Python的引用是否还活着,或者有什么其他的解决办法吗?

谢谢

3 个回答

0

(与旧方案相比的更新)

我们可以调用引用并检查它是否为 None:

assert reference_object() is not None, "对象已经不存在了"

来自 weakref 文档

4

来自Python C API文档:

PyObject* PyWeakref_GetObject(PyObject *ref)
返回值:借用的引用。
从一个弱引用ref中获取被引用的对象。如果这个对象已经不存在了,就返回None。这个功能在2.2版本中新增。

3

如果你对弱引用调用 PyWeakref_GetObject,这个函数应该会返回 Py_None 或 NULL,我记不太清楚了。不过你可以检查一下它返回的是哪一个,这样就能知道被引用的对象已经不在了。

撰写回答