python - 尝试不同的功能,直到不抛出异常
问题描述
我有一些函数可以根据一组输入数据尝试各种方法来解决问题。如果该方法无法解决问题,则该函数将引发异常。
我需要按顺序尝试它们,直到不抛出异常。
我正在尝试找到一种优雅地做到这一点的方法:
try:
answer = method1(x,y,z)
except MyException:
try:
answer = method2(x,y,z)
except MyException:
try:
answer = method3(x,y,z)
except MyException:
...
在伪代码中,我的目标是:
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
要明确:method2
除非失败,否则不得调用method1
,依此类推。
解决方案
鉴于 Python 函数是第一类对象,您可以将它们添加到序列中:
methods = [method1, method2, method3, ..., methodN]
在这种情况下,将列表中的每一项应用于您的论点直到没有失败是很简单的:
def find_one_that_works(*args, **kwargs):
for method in methods:
try:
return method(*args, **kwargs)
except MyException:
pass
raise MyException('All methods failed')
推荐阅读
- angular - 从变量应用类
- java - 合并对象列表的 k 个列表
- javascript - 如何重用常用类型
- python - 如何用字典值替换 Pandas 系列
- r - list[1:3] 和 list[1,2,3] 之间的区别?为什么索引列表 [1:3] 在描述中给出的列表中引发错误
- numpy - 如何将 csv 文件从 S3 存储桶下载到 numpy 数组中
- android - 升级到 0.60.4 后 React-native 版本不匹配
- python-3.x - 为包含编码字节字符串的文件生成 sphinx autodoc
- css - 为什么 box-sizing 在这里不适用?
- r - 使用带有重置的 dplyr 的 R 累积和