Search code examples
pythonpyside

How to know if object gets deleted in Python


I have an object in the heap and a reference to it. There are certain circumstances in which the object gets deleted but the reference that points to its location doesn't know that. How can I check if there is real data in the heap?

For example:

from PySide import *
a = QProgressBar()
b = QProgressBar()
self.setIndexWidget(index,a)
self.setIndexWidget(index,b)

Then the a object gets deleted but print(a) returns a valid address. However if you try a.value() - runtime error occurs (C++ object already deleted).

a is None returns False.


Solution

  • use sip module, read more about sip here

    import sip
    
    a = QProgressBar()
    sip.isdeleted(a)
    False
    
    sip.delete(a)
    a
    <PyQt4.QtCore.QObject object at 0x017CCA98>
    
    sip.isdeleted(a)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    RuntimeError: underlying C/C++ object has been deleted