多个try循环中的catch块

时间:2017-01-24 09:57:18

标签: python loops exception

我做这样的事情我是愚蠢的吗?我觉得我可能没有从根本上理解try catch块的目的。

我有一个脚本,我希望在守护程序上运行自动驾驶,有时会发生的事情是检查列表中的某些资源是否已完全分配。如果资源是完全分配的,它不能继续一件事,但它可以做其他事情。因为我也在使用API​​调用某些内容,所以API抛出的Exception非常通用(就像API_Exception)。在这种情况下,多个try块是否毫无意义?

主要问题是break不允许我退出循环

for:
    try: 
         stuff()
    except ExceptionA:
         handle()
         break
    except ExceptionB:
         report()
         sys.exit()
    try:
         other_stuff()
    except ExceptionA:
         handle_in_a_different_way()
         break
    except ExceptionC:
         report()
         sys.exit()

other_code_that_should_execute_if_there_is_a_break()

在这种情况下,我应该只是组合这两个块并捕获ExceptionA一次吗? ExceptionA可能没有易于解析的参数。

for:
    try:
        stuff()
        other_stuff()
    except ExceptionA:
        if ExceptionA has param
            handle()
        elif ExceptionA has other param
            handle_in_a_different_way()
    except ExceptionB:
        report()
        sys.exit()
    except ExceptionC:
        report()
        sys.exit()

1 个答案:

答案 0 :(得分:0)

我在异常方面不是很有经验,但我在堆栈中发现了一些可能有用的东西。

Catch multiple exceptions in one line (except block)

它还取决于你当前使用的是哪个版本,在python 2中你似乎可以使用逗号来分隔异常,但在python 3中,人们建议使用'as'来将它们设置在一个变量中,那么你可以验证如何对待它们