如果发生错误,请删除打开的文件

时间:2014-11-11 00:31:06

标签: python contextmanager

使用'使用open()'是否可以关闭和删除?

在名为' write_file'的例程中进行计算/提取/查询时,偶尔会遇到错误。

try:
    with open(some_file, 'w') as report:
        write_file(report, other_variables)
except:
    logging.error("Report {} did not compile".format(some_file))

我在try / except中包装了这个,但它仍然将报告编写为异常。

2 个答案:

答案 0 :(得分:2)

如果您在遇到任何异常后轻松删除该文件,那么这就足够了:

import os

try:
    with open(some_file, 'w') as report:
        write_file(report, other_variables)
except:
    logging.error("Report {} did not compile".format(some_file))
    os.remove(some_file)

请记住,要了解您正在捕捉的异常情况几乎总是更好。

一些免费的建议:如果我担心将废话写入文件,我会将您正在做的事情分成两个不同的步骤。

首先,我会在打开文件之前确定是否有一些计算或语句会抛出异常。如果确实如此,我甚至不打算打开文件。

其次,如果第一步没有异常,我会打开文件并写入。您可以选择围绕try / except块包装此步骤以捕获文件IO错误。

像这样分割你的工作的好处是,如果发生问题,它可以更容易地诊断问题。第一步产生的异常类别必然与第二步产生的异常类别不同。

答案 1 :(得分:0)

经过一番挖掘,我发现,不,你不能关闭并删除一个打开的文件。在这种情况下,使用tempfile更有意义。如果报告正确符合,我可以从tempfile中读取并编写实际报告。这样,脚本就不会创建,编写然后删除实际文件。

with tempfile.TemporaryFile() as report:
    write_file(report, other_variables)

https://docs.python.org/3.4/library/tempfile.html