尝试不同的功能,直到没有异常

Mar*_*ers 6 python python-3.x

我有一些函数,它们尝试根据一组输入数据使用各种方法来解决问题。如果该方法无法解决问题,则该函数将引发异常。

我需要按顺序尝试它们,直到没有异常。

我正在尝试找到一种优雅的方法:

try:
    answer = method1(x,y,z)
except MyException:
    try:
        answer = method2(x,y,z)
    except MyException:
        try:
            answer = method3(x,y,z)
        except MyException:
            ...

Run Code Online (Sandbox Code Playgroud)

在伪代码中,我的目标是:

tryUntilOneWorks:
    answer = method1(x,y,z)
    answer = method2(x,y,z)
    answer = method3(x,y,z)
    answer = method4(x,y,z)
    answer = method5(x,y,z)
except:
    # No answer found
Run Code Online (Sandbox Code Playgroud)

要明确:method2除非method1失败,否则不能调用,依此类推。

Mad*_*ist 5

鉴于Python函数是一流的对象,您可以将它们添加到序列中:

methods = [method1, method2, method3, ..., methodN]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,将列表的每一项应用到您的参数直到没有失败都是很简单的:

def find_one_that_works(*args, **kwargs):
    for method in methods:
        try:
            return method(*args, **kwargs)
        except MyException:
            pass
    raise MyException('All methods failed')
Run Code Online (Sandbox Code Playgroud)