Skip to main content
 首页 » 编程设计

python之为什么你可以多次关闭()一个文件对象

2025年05月04日24haluo1

这个问题纯粹是出于好奇。在最近的问题讨论中提出 here , 我经常想知道为什么上下文管理器 (with) 不会在人们通过误解显式关闭文件时抛出错误......然后我发现你可以调用 close( ) 在一个文件上多次使用,即使不使用 with 也没有错误。

我们唯一能找到的相关信息是 here它只是温和地说(强调我的):

close( )
Close the file. A closed file cannot be read or written any more. Any operation which requires that the file be open will raise a ValueError after the file has been closed. Calling close() more than once is allowed.

这似乎是有意设计的,但是,如果您不能无一异常(exception)地对关闭的文件执行任何操作,我们就无法弄清楚为什么允许多次关闭文件。有用例吗?

请您参考如下方法:

  1. with 的想法是错误的。这种行为一直存在于 Python 中永远,因此为了向后兼容而保留它是值得的。

  2. 因为引发异常没有任何意义。如果您的代码中存在实际错误,您可能会在使用完文件之前关闭文件,那么无论如何在使用 read 或 write 操作时都会出现异常,并且因此,您永远不会到达对 close 的第二次调用。

  3. 允许这样做很少使代码更易于编写,避免添加大量if not the_file.isclosed(): the_file.close()。

  4. BDFL 以这种方式设计文件对象,我们坚持这种行为,因为没有充分的理由改变它。