我有以下代码来执行普通文本文件的循环读取:
def file_reader(filename):
with open(filename, 'rb') as f:
while True:
for line in f:
yield line.strip()
f.seek(0)
我想知道如果用户在程序执行期间某处按Ctrl+C
,文件何时会关闭?
答案 0 :(得分:0)
Python 可能无法关闭文件。它将被关闭,因为操作系统将在进程退出时关闭所有打开的文件句柄。
CPython可以并且在关机过程中清理生成器,但该过程不是保证,但会尽最大努力清除任何导入模块中的所有引用,从而导致引用计数降至0。
生成器对象可能被清除并调用__del__
方法,然后调用generator.close()
,这会抛出GeneratorExit
个异常yield
行,它将导致生成器退出,with
语句关闭文件对象。