私は非常に簡単に書くことができますが、例外を処理する必要があるメソッドがたくさんあります。例外管理は常に同じなので、関数としてラッパーを記述し、特定の関数呼び出しインスタンスをパラメータとして呼び出すようにしたいと考えています。出来ますか?これらの線に沿って引数を引数として持つ関数を渡す方法
何か(これは非稼働イラストです):
def g(h):
while True:
try:
x = h()
except:
# got an error
print ("Unexpected error. Retry.")
else:
# everything is fine
return x
def f1(x):
# do something that may fail (e.g. access a distant server)
y = (...whatever...)
return y
def f2(x,y):
# do something else that may fail (e.g. access a distant server, but different request)
z = (...whatever...)
return z
print (g(f1(3)))
print (g(f1(6)))
print (g(f2(5,'abc')))
注:私はクラス定義を必要としない答えを探しています。また、私はPythonのラムダ関数に精通していませんが、それはソリューションの一部である可能性がありますか?
g成功するまで戻らない - あなたが望むものは? –
はい、正確です。私はそれを言及すべきだった。実用的には、最大試行回数でタイムアウトを実装します。あなたのコードから – nekonaute
- なぜそれは機能しませんか? haventはまだpyfiddleに投稿しましたが、合法的なようです... - '' args''と '** kwargs''(' https://stackoverflow.com/questions/36901/ 'g(f1,3)'のような種類の関数を必要とする追加のパラメータを 'g'が取ることを可能にするために、何もしないで二重星型のアスタリスクとスターのアスタリスクを使う'g'は与えられた関数に物を渡す必要があります.... –