- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
如果对象的 __init__
没有完成(例如抛出异常),是否会调用 __del__
?
最佳答案
class test():
def __init__(self):
raise
def __del__(self):
print "__del__ called"
try:
test()
except:
pass
是的。
说明: __del__
在对象的最后一个引用被删除时被调用。但是如果你没有捕捉到异常,__del__
将不会被调用,因为 python 仍然在堆栈中保留对对象的引用,并且一直保留到程序退出以打印回溯。如果您捕获并处理异常,则一旦与异常相关的所有信息从堆栈中丢弃,该对象就会被删除。
当然,如果程序即将退出,__del__
并不能保证成功运行,除非小心谨慎,在某些情况下甚至不能——参见 __del__
warning .
附录: Cédrik Julien 在他的回答(现已修改)中说:“如果 __new__
引发异常,您的对象将不会被创建并且 __del__
不会被调用”。这并不总是正确的。这是一个示例,即使在 __new__
中引发了异常,也会调用 __del__
:
class test():
def __new__(cls):
obj = object.__new__(cls)
raise
return obj
def __del__(self):
print "__del__ called"
所以当我们在返回之前对 test
对象 obj
做一些事情时发生了一些异常。但由于对象已经创建,__del__
被调用。教训是:在 __del__
方法中,不要假设在 object.__new__()
实际上发生之后应该发生的任何事情 .否则,您可能会在尝试访问不存在的属性或依赖其他一些无效的假设时引发异常。该异常将被忽略,但 __del__
应该完成的任何任务也会失败。
关于python - 是否在未完成初始化的对象上调用了 del?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6409644/
据我所知,del a 和 del(a) 似乎都具有相同的效果。如果是这样,为什么 Python 允许 del 作为语句和函数存在? 最佳答案 del 始终是一个语句。使用括号并不意味着您在进行函数调用
我已经用 Python 创建了一个列表 >>> my_list = [1, 2, 3, 4] 现在如果我想删除列表,我想使用 del 运算符,比如 >>> del my_list 这很好用并且可能是使
我在 (xx,yy) 网格中定义了一个二维函数 f(x,y)。我想在数值上获得它的偏导数,如下所示。请注意,np.gradient 不会完成这项工作,因为它返回沿每个轴的矢量场。 我该怎么做?这是我的
我有一个在 Linux 机器上运行的服务,它创建一个 命名管道 字符设备专用文件,我想编写一个 Python3 程序,通过编写文本命令和读取文本与该服务通信来自 pipe 设备的回复。我没有该服务的源
我正在尝试此代码,但它不起作用,请帮忙,jquery 新手 我的 HTML SAM C WILL HAVE BACON
这个问题在这里已经有了答案: Why does del (x) with parentheses around the variable name work? (2 个答案) "assert" st
我有一个 TimeInterval 我必须将它变成一个 String 以便它可以添加到从 Apple Watch 传递的 Dictionary通过 WatchConnectivity 连接到 iPho
我希望我的 C/M-h 键成为删除的绑定(bind)。 global-set-key 的通常解决方案对我不起作用,因为我希望这些键在任何地方都表现为删除,包括 minibuffer 和各种模式,并且能
考虑以下代码 #! /usr/bin/env python my_dict = {1:['Bernd','das','Brot'], 2:['Chili','das','Schaf'], 3:['Br
我对字典的 del 语句有问题,因为我得到了多次删除。例如我的代码如下所示: info_dict = {'parent1':{'exon':{'exon1':{'str_0':1, 'end_0':1
for x,y in words: for z in x: if z in stopwords: del x[x.index(z)] 这是我的代码。 w
今天测试一些 Python 代码,我尝试了以下代码: (以下运行在 Python 3.2+ 上,尽管以前的版本在使用 del 并且在封闭范围内引用变量时会引发 SyntaxError) def x()
我写了一个 python 脚本,可以在晚上 sleep 时备份我的文件。该程序设计为在计算机打开时运行,并在备份完成后自动关闭计算机。我的代码如下所示: from datetime import da
我对 python 和编程非常陌生。我现在正在学习循环,并尝试了以下代码来看看会发生什么。我想知道的是为什么下面的代码不会崩溃或不断重复“Robert”。 谢谢。 name = ["Robert",
在我的 python 程序中,我使用 pandas 读取一个 csv 文件并存储在内存中: data = pandas.read_csv('data.csv') 在运行上述命令之前,我使用 free
我有一个长列表,其中每个元素都是一个长度为 2 的列表。每个列表的第一个元素是一个字符串,每个列表的第二个元素是一个与字符串对应的整数。 我想遍历长长的“父”列表并删除整数小于三的任何“子”列表。这是
class ToBeDeleted: def __init__(self, value): self.value = val # Whatever... def
假设我们有一个 python 类: class A(object): def __del__(self): print "Del!" __del__ 在任何 A 实例的删除/垃
当我尝试在 lambda 中使用 del 将线程列表精简为仅运行的线程时,我注意到了一个问题: map(lambda x: del(x) if not x.isAlive() else x, self
是否有一种单行方式可以执行以下操作? myDict = {} if 'key' in myDic: del myDic['key'] 谢谢 最佳答案 你可以写 myDict.pop(key,
我是一名优秀的程序员,十分优秀!