捕获异常并继续 Python 中的 try 块

新手上路,请多包涵

我可以在异常发生后返回执行 try 块吗?

例如:

 try:
    do_smth1()
except:
    pass

try:
    do_smth2()
except:
    pass

对比

try:
    do_smth1()
    do_smth2()
except:
    ??? # magic word to proceed to do_smth2() if there was exception in do_smth1

原文由 igor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 727
2 个回答

不,你不能那样做。这就是 Python 的语法。一旦你因为异常退出了一个 try-block,就没有办法回来了。

但是for循环呢?

 funcs = do_smth1, do_smth2

for func in funcs:
    try:
        func()
    except Exception:
        pass  # or you could use 'continue'

但是请注意,裸露的 except 被认为是一种不好的做法。您应该改为捕获特定异常。我捕获了 Exception 因为在不知道这些方法可能抛出什么异常的情况下,我可以做到这一点。

原文由 user2555451 发布,翻译遵循 CC BY-SA 3.0 许可协议

虽然其他答案和已接受的答案是正确的并且应该在实际代码中遵循,但为了完整性和幽默性,您可以尝试 fuckitpy ( https://github.com/ajalt/fuckitpy ) 模块。

您的代码可以更改为以下内容:

 @fuckitpy
def myfunc():
    do_smth1()
    do_smth2()

然后调用 myfunc() 将调用 do_smth2() 即使 do_smth1()) 中存在异常

注意:请 不要 在任何真实代码中尝试,这是亵渎

原文由 pankaj 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题