如何完成 - 在__del__上打开文件写入? [英] how to achive - file write open on __del__?

查看:109
本文介绍了如何完成 - 在__del__上打开文件写入?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图做一些关于class obj破坏的活动。
如何在_del__函数中打开文件?
(我使用Python 3.4)

  class iam(object):

def __init __(self):
print(I m born)$​​ b
$ b def __del __(self):
f = open(memory_report.txt,w)
f.write(He safe safe)
f.close()

if __name__ =='__main__':
i = iam()
print (脚本结束,现在GC清理内存)



输出:



 我m 
脚本结束。现在GC清理内存
在< __ main __中的<绑定方法iam .__ del__>< 0x00000000022F1A58>处的iam对象>>中忽略了异常。
Traceback(最近的最后一次调用):
文件F:\Kumaresan\Code\Python\CommonLib\src\kmxPyQt\devConsole3\tet.py,第14行,在__del__
NameError:name'open'is not defined


解决方案正如其他人所提到的,不要使用____del___方法来执行这种清理。相反,使用contextmanagers( with -statement)或注册atexit-handlers。


I m trying to do a some activity on class obj destruction. How do I achive file open in _del__ function? (I m using Python 3.4)

class iam(object):

    def __init__(self):
        print("I m born")

    def __del__(self):
        f = open("memory_report.txt", "w")
        f.write("He gone safe")
        f.close()

if __name__ == '__main__':
    i = iam()
    print("Script Ends. Now to GC clean memory")

Output:

I m born
Script Ends. Now to GC clean memory
Exception ignored in: <bound method iam.__del__ of <__main__.iam object at 0x00000000022F1A58>>
Traceback (most recent call last):
  File "F:\Kumaresan\Code\Python\CommonLib\src\kmxPyQt\devConsole3\tet.py", line 14, in __del__
NameError: name 'open' is not defined    

解决方案

As others have mentioned, don't use the ____del___ method to perform such cleanup. Instead, use either contextmanagers (with-statement) or register atexit-handlers.

这篇关于如何完成 - 在__del__上打开文件写入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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