Python 方法来尝试另一种任意方法,直到它运行无误?
Python method to try another arbitrary method until it runs without error?
我正在尝试创建一个方法来 运行 传递给它的任意方法,直到它 运行 没有错误。
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/ lots of options on handling retrys with a nice interface. Its a fork of the older retrying libary: https://pypi.org/project/retrying/
我正在尝试创建一个方法来 运行 传递给它的任意方法,直到它 运行 没有错误。
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/ lots of options on handling retrys with a nice interface. Its a fork of the older retrying libary: https://pypi.org/project/retrying/