finally
выполняется перед выходом из блока try
. Фактически, finally
всегда выполняется (чтобы обеспечить некоторую «очистку», даже если произошла ошибка). Из документов Python :
Если присутствует предложение finally
, предложение finally
будет выполнено как последняя задача перед завершением оператора try. Предложение finally запускается независимо от того, выдает ли оператор try
исключение.
Фактически, даже блок return
в try
не будет выполнен, попробуйте:
def f():
print("`f` is being called")
try:
return "HIGH FIVE ME!"
except BaseException as exc:
pass
finally:
return "JUST KIDDING"
Всего через несколько строк после первой кавычки:
Если предложение finally
содержит оператор return
, оператор finally
предложения *1025* будет выполняться раньше, и вместо оператор return
в предложении try
.
(мой акцент.) Я думаю, можно с уверенностью сказать, что то же самое верно для except
.