簡體   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