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

Python file.close()是否可以同时执行刷新和关闭文件的任务,而不是在文件之前使用file.flush()?,python,Python,我知道python会自动完成很多事情。 因此,如果我们不手动关闭文件,那么它可以自动关闭文件。 但是我注意到仅仅关闭文件(close())并不会刷新缓冲区(flush())。 这就是python不会自动执行的特定情况吗?这里,我举一个例子: # no_flush_on_close.py def write_file(filename): f = open(filename, 'w') f.write('Hello, world\n') f.close() write_f

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

这里,我举一个例子:

# no_flush_on_close.py
def write_file(filename):
    f = open(filename, 'w')
    f.write('Hello, world\n')
    f.close()

write_file('no_flush_on_close.txt')
运行此脚本将创建一个文本文件,其中包含一行“Hello,world”。它告诉我flush()是在
close()
上调用的。现在,注释掉
f.close()
行,删除文本文件并重试——结果相同

唯一不起作用的情况是,当您引发了一个exeption(错误)时,文件将不会被刷新。要处理这种情况,请使用上下文管理器形式的
open()
(也称
with
语句):


上下文管理器确保文件被正确刷新和关闭,因此使用它是一种良好的做法。

通常,如果关闭句柄,它将首先自动刷新它。你能提供一个不先刷新的例子吗?你有代码证明关闭时没有刷新吗?@HaiVu,这是不使用刷新的代码:f=open(“file_text.txt”,“w”)f.write(“这是第一行”\n)f.write(“这是第二行”)f.close C标准库,Python的后端是,保证未写入的文件内容将在关闭时刷新。声称这不会自动发生需要证明。从:Flush和close this stream的文档中。不,如果没有Flush,它不会写入文件。文本文件为空。我在MacOSX上的jupyter笔记本中使用此代码。这和那有关系吗?我无法重现你所看到的。这是我的Jupyter笔记本:
def write_file(filename):
    with open(filename, 'w') as f:
        f.write('Hello, world\n')
        raise RuntimeError('Will it flush?')  # Yes, it will flush and close