在我的应用程序中,我从数据库中获取数据并对其执行计算。然后,数据通过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
答案 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是要返回的值。