我知道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
上下文管理器确保正确刷新和关闭文件,因此最好使用它。