开发者社区 问答 正文

异常内的异常处理

因此,我遵循以下两个不同的try-except块,其中我不理解输出,我相信这是由于except块内的异常。即使我发现了几个标题相似的问题,但它们并没有帮助我回答我的问题。

第一块:

try:
    try:
        raise IndexError
        x = 5/0
    except ArithmeticError:
        print("1")
        print("2")
    except IndexError:
        print("3")
    finally:
        print("4")
except:
    print("5")                #Output: 3 4

由于我们捕获了IndexError,为什么最后一个异常* 5 *?(我知道 raise IndexError 被第二个捕获,除了得到 * 3 ,并且由于总是执行,所以 4 * 也被打印出来)。

第二(相关)问题:

try:
    try:
        x = 5/0
    except ArithmeticError:
        print("1")
        raise IndexError            # this is different this time!
        print("2")
    except IndexError:
        print("3")
    finally:
        print("4")
except:
    print("5")                      #Output: 1 4 5

如何提高引发IndexError不执行print(“ 3”)语句?又为什么这次得到5输出,因为在第一个示例中没有得到?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 19:55:59 428 分享 版权
1 条回答
写回答
取消 提交回答
  • except将捕获在try中抛出的异常,但不能捕获在 块中其他兄弟对象中抛出的异常。对于任何给定尝试与多个兄弟除外块, 一个的那些除外块将处理这个异常。

    在您的第一个示例中,由于外部try中的代码不会引发异常,因此不会打印5。内部try中的异常被抛出,并由该级别的except块之一处理。

    在您的第二个示例中,不会打印3,因为try块中的代码不会引发IndexError。它抛出一个ArithmeticError,被相应的except块捕获。然后,该块还会引发一个异常,该异常存在于整个try / except结构中,并被更高的except块捕获。

    回答来源:stackoverflow

    2020-03-23 19:56:06
    赞同 展开评论
问答地址: