因此,我有两个不同的尝试-除了块,其中我不理解输出,我相信这是因为例外块内的例外。尽管我发现了几个标题相似的问题,但它们并没有帮助我回答我的问题。
第一区:
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为什么raise IndexError不执行print("3")语句?为什么这次我们要得到5输出,因为我们在第一个例子中没有得到它?
发布于 2020-03-14 23:45:51
except将捕获在try中抛出的异常,但不会捕获在其他同级except块中抛出的异常。对于任何具有多个兄弟级try块的给定except块,其中一个except块将处理异常。
在第一个示例中,没有打印5,因为外部try中的代码不会引发异常。内部try中的一个异常将被抛出,并由该级别的一个except块处理。
在第二个示例中,没有打印3,因为try块中的代码不会抛出IndexError。它抛出一个ArithmeticError,它被相应的except块捕获。然后,该块还抛出一个异常,该异常存在于整个try/except结构中,并被一个更高的except块捕获。
https://stackoverflow.com/questions/60688321
复制相似问题