【发布时间】:2016-01-29 20:24:30
【问题描述】:
我正在使用一个简单的 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 语句中会出现什么样的错误,不仅会停止执行,还会阻止文件正确关闭?
一些附加信息:
- 该脚本是在深夜运行的计划任务。
- 我一直无法通过交互式运行进程来重现。
- 此问题每 2-3 晚出现一次。
- 我确实在 Windows 事件日志中看到了指向 dll 文件、.NET Framework 和 0xC0000005 错误(这是内存冲突)的错误。 do_stuff2() 使用的 API 确实使用了这个 DLL,而后者又使用了 .NET Framework。
显然我将尝试自行解决问题,但此时我的问题集中在with(可能是我的代码下方的一些层)内部可能发生的事情,这可能会破坏其关闭的预期功能无论with的内容是否执行成功,文件都正确。
【问题讨论】:
-
我猜这不是写入文件的错误,看起来中间有些东西失败了。 with open 将在代码块之后关闭文件,而不是在您编写的每一行之后。并使用'wb'写作
标签: python python-2.7 with-statement