Pythonic在处理字典时处理错误的方法

时间:2018-06-19 08:44:10

标签: python dictionary flask error-handling exception-handling

在我的应用程序中,我从数据库中获取数据并对其执行计算。然后,数据通过API发送到我的应用程序的前端。

从DB读取数据后,我有一个这样的字典:

{"a":5, "b":0}

然后我有一个这样的函数,它将字典作为输入并添加更多的键,这些值是从其他键计算的。

function dict_calc(data_dict):
    data_dict["c"] = data_dict["a"] / data_dict["b"]
    data_dict["d"] = data_dict["a"] * data_dict["b"]
    return data_dict

我的问题是,如果出现错误(上面的示例会抛出ZeroDevisionError),那么我仍然希望将数据保存在密钥中,并且#34; d"但仍然需要一种方法告诉最终用户或前端出错的地方。我想出的一个想法是:

try:
    data_dict["c"] = data_dict["a"] / data_dict["b"]
except ZeroDivisionError:
    if data_dict["a"] == 0:
        data_dict["c"] = {"msg":"Datapoints a & b are 0."}
    else:
        data_dict["c"] = {"msg":"Datapoint b is 0."}
data_dict["d"] = data_dict["a"] * data_dict["b"]
return data_dict

但是现在所有的代码都需要一种方法来传递字典中的msg字典。

是否有更好的方法来传递"无效"我的msg字典以外的数据?

问候, c3ntry

1 个答案:

答案 0 :(得分:0)

我希望这会有所帮助,

实际上,我们有2个问题,

  • 如果发生错误,我们不希望字典中包含任何额外的数据变量。

  • 我们想通知用户任何此类错误。

解决此问题的一种方法是拥有一个队列,该队列将为我们保存错误消息,直到被询问为止。

from queue import Queue error = Queue() try: data_dict["c"] = data_dict["a"] / data_dict["b"] except ZeroDivisionError: if data_dict["a"] == 0: error.put('Datapoints a & b are 0.') else: error.put('Datapoints b is 0.') data_dict["d"] = data_dict["a"] * data_dict["b"] return data_dict

返回到函数调用后,使用error.get()通知用户。 这里有一个问题,即dict ['c']不会在您通过的dict中创建。 因此,请尽可能使用dict.get('c',(default_value)) 如果“ c”不存在,则default_value是要返回的值。