首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常内的异常处理

异常内的异常处理
EN

Stack Overflow用户
提问于 2020-03-14 23:32:35
回答 1查看 20关注 0票数 0

因此,我有两个不同的尝试-除了块,其中我不理解输出,我相信这是因为例外块内的例外。尽管我发现了几个标题相似的问题,但它们并没有帮助我回答我的问题。

第一区:

代码语言:javascript
复制
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也被打印出来)。

第二个(相关)问题:

代码语言:javascript
复制
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

为什么raise IndexError不执行print("3")语句?为什么这次我们要得到5输出,因为我们在第一个例子中没有得到它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-14 23:45:51

except将捕获在try中抛出的异常,但不会捕获在其他同级except块中抛出的异常。对于任何具有多个兄弟级try块的给定except块,其中一个except块将处理异常。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60688321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档