在python中,如果可以';t使用;加上;

在python中,如果可以';t使用;加上;,python,file,file-handling,Python,File,File Handling,“如何确保在Python中关闭文件”的标准答案是将命令包装在“with”语句中,以便在退出“with”块时调用析构函数 但是,如果您不能这样做,因为文件句柄需要在大量代码中保持打开状态,该怎么办?例如,在对象构造函数中打开文件句柄,将其保存到对象属性,然后在许多对象方法中引用文件句柄 可以将文件句柄的打开位置移动到方法本身,但基本上,在这种情况下,每次调用方法时,我都会打开/关闭文件,这效率要低得多 我曾尝试在对象析构函数中放置一个“close”命令(“del”方法),但这不起作用。一个肮脏但容

“如何确保在Python中关闭文件”的标准答案是将命令包装在“with”语句中,以便在退出“with”块时调用析构函数

但是,如果您不能这样做,因为文件句柄需要在大量代码中保持打开状态,该怎么办?例如,在对象构造函数中打开文件句柄,将其保存到对象属性,然后在许多对象方法中引用文件句柄

可以将文件句柄的打开位置移动到方法本身,但基本上,在这种情况下,每次调用方法时,我都会打开/关闭文件,这效率要低得多


我曾尝试在对象析构函数中放置一个“close”命令(“del”方法),但这不起作用。

一个肮脏但容易的胜利是在打开文件名时保留文件名的记录,并确保在最后显示
file.close(…)
。保留一个列表或包装
open()
函数(建议人)可以完成此任务


Post建议了几种解决方案,如包装内置文件对象、命令行方法和模块
psutil
,等等,其中一些可能适合您的情况。

为什么在析构函数中关闭文件不起作用?当你处理完这个物体时,它没有被摧毁吗?如果它在出现错误时失败并保持不变,您可以将其包装在
try
-
块中,但最后
-
块除外。我不确定在这种情况下会执行什么,如果有的话。try/except/finally可能不起作用,因为“open”命令也在构造函数中,但是程序会继续运行,并从其他方法开始写入。如果你按下红色的大按钮,我非常确定Python进程打开的所有文件都会被操作系统关闭。在任何情况下,该行为都与将
一起使用,而不是手动执行
打开
-
关闭
没有区别。要使用
try
您必须将对象创建和对象的所有用法包装在同一
try
块中,然后它就可以工作了。但你可能会觉得不方便?事实上我刚刚确定没有调用析构函数。我必须弄清楚这是为什么。这是没有希望的: