我需要将数据写入文件并在文件存在时覆盖它。如果出现错误,我的代码应该捕获异常并恢复原始文件(如果适用)
如何恢复文件?我应该阅读原始内容并将内容放入列表中,然后在发生异常的情况下将该列表写入文件吗?
还有其他选择吗?非常感谢任何人都可以提供某种示例
干杯
答案 0 :(得分:1)
任何恢复错误的尝试都将是脆弱的;如果您的程序在尝试恢复数据时无法继续或遇到其他错误,该怎么办?
更好的解决方案是在您知道无论您做什么成功之后,不要替换原始文件。将您需要的任何内容写入临时文件,然后在准备好后,将原始内容替换为临时文件。
答案 1 :(得分:1)
一种方法是在现有文件的末尾附加新数据。如果发现错误,请删除所有附加的错误。 如果没有错误,请删除添加之前的所有内容,以便新文件只包含附加数据。
在开始在新文件中捕获数据之前创建文件的副本。
答案 2 :(得分:1)
下面的代码将复制原始文件并设置一个标志,指示它是否存在之前。您是否在try
中进行了编码,如果它到达最后它会将worked
标记设置为True
而您将转到其他位置,它将永远不会到达,例外仍然会被提出但finally
将清理并替换该文件(如果该文件首先存在)。
import os
import shutil
if os.path.isfile(original_file):
shutil.copy2(original_file, 'temp' + original_file)
prev_existed = True
else:
prev_existed = False
worked = False
try:
with open(original_file, 'w') as f:
## your code
worked = True
except:
raise
finally:
if not worked and prev_existed:
shutil.copy2('temp' + original_file, original_file)