我使用下面这样一个简单的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”一行,正如我所期望的那样,如果文件正确地关闭了,就像使用with
时应该发生的那样。我知道脚本在do_stuff2()
失败的唯一原因是没有我的日志工作,因为这个函数调用了一个自己做日志记录的API,而另一个日志文件告诉我2已经被执行了,即使它没有完成。你知道吗
我的问题是,在with
语句中会发生什么样的错误,这种错误不仅会停止执行,还会阻止文件正确关闭?你知道吗
一些附加信息:
显然,我将尝试自行解决问题,但此时我的问题集中在with
(可能是代码下面的一些层)内部可能发生的情况,这可能会破坏其正确关闭文件的预期功能,而不管with
的内容是否成功执行。你知道吗
只有在出现异常时,
with
才能关闭文件。如果扩展名中存在segfault,则可能不会引发异常,并且进程将终止,而不会给Python关闭文件的机会。您可以尝试在多个位置使用f.flush()
强制Python写入文件。你知道吗相关问题 更多 >
编程相关推荐