我有一些函数,它们尝试根据一组输入数据使用各种方法来解决问题。如果该方法无法解决问题,则该函数将引发异常。
我需要按顺序尝试它们,直到没有异常。
我正在尝试找到一种优雅的方法:
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失败,否则不能调用,依此类推。
鉴于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)
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |