Python:在异常stop i之后如何在try语句中继续执行

2024-10-01 09:23:14 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的应用程序中,我从一个文件加载一些数据。这可能会失败并引发异常。因此,我希望记录一个警告并继续加载下一个数据。在

我就是这样做的:

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))

它有用,但看起来很重。所以,我的问题是:有没有一种方法可以让它更轻? 可能是这样的事情:

^{pr2}$

我曾经在其他帖子中看到过一些建议把它放到循环中的答案,但是,管理我的参数不是更重吗?在

我在等任何这样的建议。不管在什么情况下我的代码是有效的。所以,这只是一个好奇的问题,这个问题也可以帮助其他程序员。。。在


Tags: tologdefaultdatagetparamasexception
3条回答

在这种情况下,我可能会引入一个新函数(假设您不能或不想更改现有的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。您的申请可能接受也可能不接受。在

我会这样做:

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))

这里唯一的区别是现在可以通过数据dict访问结果,例如data["A"]。在

请注意,当getDefaultConf()引发异常时,关联的条目将不会包含在dict中这可能是一件好事,也可能是坏事,这取决于您计划如何使用数据。在

如果没有指定值时确实需要默认值,可以使用data.get("A", None)。在

把你的尝试放在方法。这个会的。在

def getDefaultConf(param_1,param_2):
    try:
        #code
    except  Exception as e:
        log(WARNING, "Failed to get default parametres: "+str(e))

相关问题 更多 >