长异常链的优雅替代方案? [复制]

2024-04-27

很多时候我发现自己写的东西看起来像这样:

try:
    procedure_a()
except WrongProcedureError:
    try:
        procedure_b()
    except WrongProcedureError:
        try:
            procedure_c()
        except WrongProcedureError:
            give_up()

这太可怕了。有没有一种更优雅的方式来实现这种“尝试直到没有例外”的逻辑?好像这种事经常出现;我希望有一些我不知道的语言功能是专门为这个事情而设计的。


您可以使用for/else为此构造:

for proc in [procedure_a, procedure_b, procedure_c]:
    try:
        proc()
    except WrongProcedureError:
        continue
    else:
        break
else:
    give_up()

The else的条款for仅当控制自然脱离 for 子句底部时循环才会触发。如果你breakout(如果三个过程中的任何一个没有抛出异常,您就会这样做),它不会触发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

长异常链的优雅替代方案? [复制] 的相关文章

随机推荐