我正在尝试创建一种方法,以运行传递给它的任意方法,直到它运行无误。
def multiTry(method, sArg, **kwargs):
"""
Attempt a specified method until it runs without error.
Inputs:
method: method to be tried until it runs without error
sArg: string of all arguments to be passed to method
kwargs: all arguments needed for method
"""
for key, value in kwargs.items():
eval(key = value)
bDone = False
while not bDone:
try:
method(eval(sArg))
bDone = True
except:
pass
multiTry(method=methodToRun, sArg="myString, myNum", myString="hello", myNum=5)
目标是反复尝试:
methodToRun("hello", 5)
...直到成功运行,其中methodToRun
是任何方法,参数是任何参数。
我了解两个eval语句使用不正确。可能有完全不同的方法来实现相同的目标?我有很多方法可以单独运行直到成功,并且不想将它们中的每一个都放在行内try-except块中。
您非常接近。这样的事情应该可以满足您的需求:
def multiTry(method, **kwargs):
while(1):
try:
method(**kwargs)
return
except:
pass
multiTry(method=methodToRun, myString="hello", myNum=5)
这里不需要重新发明轮子,这是一个非常普遍的要求,我建议您使用韧性库https://tenacity.readthedocs.io/en/latest/来通过一个不错的界面来处理重试,有很多选项。它是较早的重试库的分支:https://pypi.org/project/retrying/