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/