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

VGO*_*VGO 1 python exception try-catch

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

我这样做:

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))
Run Code Online (Sandbox Code Playgroud)

它有效,但看起来很重.所以,我的问题是:它是否有办法让它更轻松?它可能是这样的工作:

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.
Run Code Online (Sandbox Code Playgroud)

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

我正在等待这种方式的任何建议.无论我的代码是什么工作.所以,这只是一个问题的好奇心问题,也可以帮助其他程序员......

Gre*_*ill 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)
Run Code Online (Sandbox Code Playgroud)

这里唯一的区别是你会None回到导致异常的电话.这可能适用于您的申请,也可能不适用.

  • 我不认为我们知道这是*实际*代码,还是它是一个带有一堆占位符变量名称的示例.我假设后者.无论如何,OP没有询问数据表示,问题是关于异常处理.我保持代码的一般结构相同,以便其他更改,如使用容器不会模糊我的观点. (4认同)