这个简单的代码
# This code will BLANK the file 'myfile'!
with open('myfile', 'w') as file:
raise Exception()
而不仅仅是抛出异常,删除“myfile”中的所有数据,,尽管甚至没有尝试过实际的写操作。
至少可以说这是危险的,当然也不是其他语言如何处理这种情况。
我怎么能阻止这个?我是否必须处理所有可能的异常,以确保目标文件不会被某些无法预料的情况消隐?当然必须有一个标准模式来解决这个问题。最重要的是:首先发生了什么?
答案 0 :(得分:3)
您正在打开文件进行写作。 这个简单的操作会使文件空白,无论你用它做什么。来自open()
function documentation:
'w'
开放写作,首先截断文件
强调我的。本质上,文件是空的,因为你没有写任何东西,而不是因为你打开它。
如果您不希望这种情况发生,请将文件推迟到您实际要写入数据的位置。将字符串列表写入文件不会导致Python级别的异常。
或者,写入 new 文件,然后重命名(移动)它以替换原始文件。将文件重命名为操作系统。
答案 1 :(得分:0)
语句open('myfile', 'w')
将 删除执行中的所有内容,即截断文件。
如果您想保留必须使用的行open('myfile', 'a')
。 a
选项适用于append
。
答案 2 :(得分:0)
打开文件进行写入会删除内容。避免数据丢失的最佳方法,不仅是在出现异常,计算机关闭等情况下,还要创建一个新的临时文件,并在完成所有操作后将文件重命名为原始名称。
yourfile = "myfile"
try:
with tempfile.NamedTemporaryFile(dir=os.path.dirname(yourfile) or '.', delete=False) as output:
do_something()
except Exception:
handle_exception()
else:
os.rename(output.name, yourfile)