我使用如下的简单python with
语句写入日志文件。
with open(filename, 'a+') as f:
do_stuff1()
f.write('stuff1 complete. \n')
do_stuff2()
f.write('stuff2 complete. \n')
do_stuff3()
f.write('stuff3 complete. \n')
我发现我的脚本在do_stuff2()
间歇性地失败但是在日志文件中我没有找到“stuff1 complete”行,正如我所期望的那样,如果文件被正确关闭,那么在使用{{1时}}。我知道脚本失败的唯一原因是with
没有我的日志工作是因为这个函数调用一个API来执行自己的日志记录,而其他日志文件告诉我2已经执行了,即使它没有完成
我的问题是在do_stuff2()
语句中会发生什么样的错误,它不仅会停止执行,还会阻止文件正确关闭?
其他一些信息:
显然我打算尝试解决问题本身,但此时我的问题主要集中在with
(我的代码下面可能有一些层)可能会破坏其预期功能的内容中。无论with
的内容是否成功执行,都要正确关闭文件。
答案 0 :(得分:2)
如果存在异常,with
只能关闭文件。如果扩展中存在段错误,则不会引发异常并且进程终止而不会让Python有机会关闭该文件。您可以尝试在多个位置使用f.flush()
来强制Python写入文件。