因此,我遵循以下两个不同的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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
except
将捕获在try中抛出的异常,但不能捕获在
块中其他兄弟对象中抛出的异常。对于任何给定
尝试与多个兄弟除外块, 一个的那些
除外块将处理这个异常。
在您的第一个示例中,由于外部try
中的代码不会引发异常,因此不会打印5
。内部try
中的异常被抛出,并由该级别的except
块之一处理。
在您的第二个示例中,不会打印3
,因为try
块中的代码不会引发IndexError
。它抛出一个ArithmeticError
,被相应的except
块捕获。然后,该块还会引发一个异常,该异常存在于整个try / except
结构中,并被更高的except
块捕获。
回答来源:stackoverflow