在我的应用程序中,我正在从文件中加载一些数据。这可能会失败并引发异常。因此,我想记录一个警告并继续加载下一个数据。
我这样做:
try:
data_A = getDefaultConf(param_1,param_2)
except Exception as e:
log(WARNING, "Failed to get default parametres: "+str(e))
try:
data_B = getDefaultConf(param_1,param_3)
except Exception as e:
log(WARNING, "Failed to get default parametres: "+str(e))
try:
data_C = getDefaultConf(param_4,param_5)
except Exception as e:
log(WARNING, "Failed to get default parametres: "+str(e))
try:
data_D = getDefaultConf(param_4,param_6)
except Exception as e:
log(WARNING, "Failed to get default parametres: "+str(e))
try:
data_E = getDefaultConf(param_4,param_7)
except Exception as e:
log(WARNING, "Failed to get default parametres: "+str(e))
它有效,但看起来很重。所以,我的问题是:它是否有办法让它更轻松? 它可能是那样的工作:
try:
data_A = getDefaultConf(param_1,param_2)
data_B = getDefaultConf(param_1,param_3)
data_C = getDefaultConf(param_4,param_5)
data_D = getDefaultConf(param_4,param_6)
data_E = getDefaultConf(param_4,param_7)
except Exception as e:
log(WARNING, "Failed to get default parametres: "+str(e))
# Here something that could work like a "continue" statement so that if loading of
# data_2 fails it will store the log and continue by trying to load data_3, etc.
我曾在其他帖子中看到过一些建议将其置于循环中的答案,但管理我的参数会不会更重?
我正在等待这种方式的任何建议。无论我的代码是什么工作。所以,这只是一个问题的好奇心问题,也可以帮助其他程序员......
答案 0 :(得分:5)
在这种情况下,我可能会引入一个新功能(假设您不能或不想更改现有的getDefaultConf
):
def getDefault(x, y):
try:
return getDefaultConf(x,y)
except Exception as e:
log(WARNING, "Failed to get default parametres: "+str(e))
return None
data_A = getDefault(param_1,param_2)
data_B = getDefault(param_1,param_3)
data_C = getDefault(param_4,param_5)
data_D = getDefault(param_4,param_6)
data_E = getDefault(param_4,param_7)
唯一的区别是,对于导致异常的调用,您将获得None
。这可能适用于您的申请,也可能不适用。
答案 1 :(得分:3)
我会这样做:
params = {
"A": (param_1, param_2),
"B": (param_1, param_3),
"C": (param_4, param_5),
"D": (param_4, param_6),
"E": (param_4, param_7),
}
data = {}
for key, args in params.items():
try:
data[key] = getDefaultConf(*args)
except Exception as e:
log(WARNING, "Failed to get default parametres: "+str(e))
这里唯一的区别是现在可以通过数据字典访问结果,例如data["A"]
。
请注意,当getDefaultConf()
引发异常时,相关条目将不会包含在dict中 - 这可能是好事还是坏事,具体取决于您计划如何使用数据。
如果在未指定值时确实需要默认值,则可以使用data.get("A", None)
。
答案 2 :(得分:1)
将你的尝试除在方法内部。这样做。
def getDefaultConf(param_1,param_2):
try:
#code
except Exception as e:
log(WARNING, "Failed to get default parametres: "+str(e))