1

私のアプリケーションでは、ファイルからいくつかのデータをロードしています。これは失敗し、例外が発生する可能性があります。結果として、警告をログに記録し、次のデータをロードし続けたいと考えています。

私はそのようにやっています:

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.

ループに入れることを提案する他の投稿でいくつかの回答を見たことがありますが、パラメーターを管理するのは重くなりませんか?

このような提案をお待ちしています。いずれにせよ、私のコードは機能しています。したがって、それは他のプログラマーにも役立つ可能性のある問題に対する単なる好奇心の問題です...

4

3 に答える 3

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、例外が発生した呼び出しに対して返されることです。これは、アプリケーションで受け入れられる場合と受け入れられない場合があります。

于 2012-06-14T08:48:16.907 に答える
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))

ここでの唯一の違いは、データ dict を介して結果にアクセスできるようになったことdata["A"]です。

によって例外が発生したgetDefaultConf()場合、関連するエントリは dict に含まれないことに注意してください。これは、データの使用方法に応じて、良いことも悪いこともあります。

値が割り当てられていないときにデフォルト値が必要な場合は、 を使用できますdata.get("A", None)

于 2012-06-14T08:50:59.050 に答える
1

メソッド内以外で試してみてください。これでうまくいきます。

def getDefaultConf(param_1,param_2):
    try:
        #code
    except  Exception as e:
        log(WARNING, "Failed to get default parametres: "+str(e))
于 2012-06-14T08:48:25.970 に答える