Итак, у меня есть следующие два разных блока try-кроме, где я не понимаю вывод, и я полагаю, что это из-за исключений внутри, кроме блоков. Несмотря на то, что я нашел несколько вопросов с похожим названием, они не помогли мне ответить на мой вопрос.
Первый блок:
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 на этот раз, так как мы не получили его в первом примере?