Python - how to check if weak reference is still available

心不动则不痛 提交于 2019-12-22 06:57:02

问题


I am passing some weakrefs from Python into C++ class, but C++ destructors are actively trying to access the ref when the real object is already dead, obviously it crashes...

Is there any Python C/API approach to find out if Python reference is still alive or any other known workaround for this ?

Thanks


回答1:


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.




回答2:


From Python C API documentation:

PyObject* PyWeakref_GetObject(PyObject *ref)
Return value: Borrowed reference.
Return the referenced object from a weak reference, ref. If the referent is no longer live, returns None. New in version 2.2.



来源:https://stackoverflow.com/questions/2993393/python-how-to-check-if-weak-reference-is-still-available

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!