繁体   English   中英

Python:异常停止后,如何继续在try语句内执行

[英]Python : How to continue execution inside a try statement after an exception stop it

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

我正在这样做:

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.

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

我正在以这种方式等待任何建议。 无论如何,我的代码都能正常工作。 所以,这只是一个好奇心,可以帮助其他程序员。

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

唯一的区别是,现在可以通过数据字典(例如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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM