Python方法尝试另一个任意方法,直到它运行无误?

问题描述 投票:0回答:2

我正在尝试创建一种方法,以运行传递给它的任意方法,直到它运行无误。

    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块中。

python kwargs try-except
2个回答
1
投票

您非常接近。这样的事情应该可以满足您的需求:

def multiTry(method, **kwargs):
    while(1):
        try:
            method(**kwargs)
            return
        except:
            pass

multiTry(method=methodToRun, myString="hello", myNum=5)

0
投票

这里不需要重新发明轮子,这是一个非常普遍的要求,我建议您使用韧性库https://tenacity.readthedocs.io/en/latest/来通过一个不错的界面来处理重试,有很多选项。它是较早的重试库的分支:https://pypi.org/project/retrying/

© www.soinside.com 2019 - 2024. All rights reserved.