为什么用raise再次抛出错误后,之前的print('ValueError!') 没有显示?
Topic source第一个问题,我这边有“ValueError!”显示的。 关于第二个问题,因为在外面那个函数当中你把问题给捕获了(except),所以编译器就不会报错给你那个traceback。 所以在外面函数except中那个raise的目的就是,就算捕获了,但是不会处理,所以继续把错误网上丢
对于第二个问题,我的认为的是在bar()中把raise注释后,虽然此时bar()中捕获到了foo()抛出的异常,但是只做了print('ValueError!')操作,并没有继续把错误往上抛出,这样外部就会认为这个异常被bar()自己处理掉了。所以不会打印foo()中的错误信息,如果不注释raise,那就理解为bar()本身没有能力处理这个异常,继续抛出给自己的上级,因为上级没有东西了,所以就在运行结果中抛出来显示了。
- 1
卡哇伊的凯子
关于下面代码我有两个问题:
第一个问题: bar()被调用的时候,foo在内部被调用,在foo的内部抛出了一个ValueError错误的同时显示了‘ValueError: invalid value: 0’,然后这个错误在外部的bar()中被捕获了。 那么我的问题是,虽然在bar()中,ValueError被捕获后又抛出,但为什么print('ValueError!')没有显示出来,它应该是在捕获foo()中的ValueError后,就会被执行然后再执行raise抛出不是吗? 第二个问题: 当我把bar()里面的raise注释掉了以后,这段代码的执行结果就是简单的一句ValueError!,代码的执行不应该是先调用bar(),然后在foo()里面抛出ValueError同时显示‘ValueError: invalid value: 0’,然后在外部被except截获之后才显示ValueError!才对吗?
希望有朋友为我解释一下。