如果在json dump期间抛出异常,如何避免部分文件?

时间:2018-02-17 01:45:18

标签: python json exception exception-handling file-handling

以下代码抛出

  

TypeError:'datetime'类型的对象不是JSON可序列化的

我知道如何解决。但是,我真正的问题是如果json.dump中发生任何异常,如何干净地构造代码以避免部分文件。

import datetime
import json

def save(data):
    with open('data.txt', 'w') as outfile:
        json.dump(data, outfile)

data = dict(sometime=datetime.datetime.now())
save(data)

上面的代码抛出异常并导致部分文件如:

{"sometime": 

我应dumps首先在try/except中使用<input id="tb1" type="text" name="textbox1"> <input id="tb2" type="text" name="textbox2"> 字符串吗?如果有,是否有任何记忆含义需要注意?或者删除except块中的文件?

2 个答案:

答案 0 :(得分:2)

使用try/except块,例如:

代码:

def save_json(data, filename):
    try:
        with open(filename, 'w') as outfile:
            json.dump(data, outfile)
    except:
        try:
            os.unlink(filename)
        except FileNotFoundError:
            pass

如果你想保留例外:

def save_json(data, filename):
    try:
        with open(filename, 'w') as outfile:
            json.dump(data, outfile)
    except:
        if os.path.exists(filename):
            os.unlink(filename)
        raise

测试代码:

import datetime
import json
import os

data = dict(sometime=datetime.datetime.now())
save_json(data, 'data.txt')

答案 1 :(得分:0)

这取决于您的JSON数据是由您控制还是来自未知来源。如果它来自某个您无法预测的地方,请使用try...except...阻止。否则,修复程序以使其始终可用于序列化。