如何知道对象是否在 Python 中被删除 [英] How to know if object gets deleted in Python

查看:96
本文介绍了如何知道对象是否在 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?

例如:

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

然后 a 对象被删除但 print(a) 返回一个有效地址.但是,如果您尝试 a.value() - 会发生运行时错误(C++ 对象已删除).

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 返回 False.

推荐答案

使用 sip 模块,阅读更多关于 sip 这里

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

这篇关于如何知道对象是否在 Python 中被删除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆