file.close() 可以同时执行刷新和关闭文件的任务,而不是在文件之前使用 file.flush() 吗?



我知道python会自动做很多事情。 因此,如果我们不手动关闭文件,那么它可以自动关闭文件。 但是我观察到仅关闭文件(close())不会刷新缓冲区(flush())。 那么这是python不会自动执行的特殊情况吗?

在这里,我有一个例子:

# no_flush_on_close.py
def write_file(filename):
f = open(filename, 'w')
f.write('Hello, worldn')
f.close()
write_file('no_flush_on_close.txt')

运行此脚本将创建包含"Hello, world"行的文本文件。它告诉我 flush() 是在close()上调用的。现在,注释掉f.close()行,删除文本文件,然后重试 - 相同的结果。

这不起作用的唯一情况是当您提出 exetion(错误)时,则不会刷新文件。要处理这种情况,请使用open()的上下文管理器形式(也称为with语句):

def write_file(filename):
with open(filename, 'w') as f:
f.write('Hello, worldn')
raise RuntimeError('Will it flush?')  # Yes, it will flush and close

上下文管理器确保正确刷新和关闭文件,因此最好使用它。

相关内容

最新更新