Python - 如何检查弱引用是否仍然可用
我正在将一些弱引用从 Python 传递到 C++ 类中,但是当真实对象已经死亡时,C++ 析构函数会主动尝试访问引用,显然它会崩溃...
是否有任何 Python C/API 方法可以查明 Python 引用是否存在还活着还是有其他已知的解决方法?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
来自 Python C API 文档:
From Python C API documentation:
如果你在弱引用上调用 PyWeakref_GetObject 它应该返回 Py_None 或 NULL,我忘记了。但是您应该检查它是否返回其中之一,这将告诉您引用的对象不再存在。
If you call PyWeakref_GetObject on the weak reference it should return either Py_None or NULL, I forget which. But you should check if it's returning one of those and that will tell you that the referenced object is no longer alive.
(与旧解决方案相比更新)
我们可以调用引用并检查它是否为 None:
assert reference_object() is not None
, "object is dead"From weakref 文档
(Update compared to the older solutions)
We can call the reference and check if it is None:
assert reference_object() is not None
, "object is dead"From weakref docs