即使将python与statemen一起使用,也无法完成对文件的写入

2024-04-25 08:15:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用下面这样一个简单的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语句中会发生什么样的错误,这种错误不仅会停止执行,还会阻止文件正确关闭?你知道吗

一些附加信息:

  1. 脚本是一个在深夜运行的计划任务。你知道吗
  2. 我从来没有能够通过交互运行进程来复制。你知道吗
  3. 问题每2-3晚出现一次。你知道吗
  4. 我确实在Windows事件日志中看到指向dll文件、.NET Framework和0xc000005错误的错误,这是内存冲突。do\u stuff2()使用的API使用的是这个DLL,而这个DLL又使用.NET Framework。你知道吗

显然,我将尝试自行解决问题,但此时我的问题集中在with(可能是代码下面的一些层)内部可能发生的情况,这可能会破坏其正确关闭文件的预期功能,而不管with的内容是否成功执行。你知道吗


Tags: 文件脚本apinet错误withframework语句
1条回答
网友
1楼 · 发布于 2024-04-25 08:15:18

只有在出现异常时,with才能关闭文件。如果扩展名中存在segfault,则可能不会引发异常,并且进程将终止,而不会给Python关闭文件的机会。您可以尝试在多个位置使用f.flush()强制Python写入文件。你知道吗

相关问题 更多 >