Сегодня этот интересный фрагмент кода Python был опубликован в Твиттере.
def f():
try:
raise KeyError
finally:
return 42
g = f()
При его выполнении f()
возвращает 42
, и в стеке нет исключений, как я ожидал. При замене return 42
, например, на как оператор pass
, исключение распространяется за пределы функции, как и ожидалось.
Однако мне интересно, почему это не так при использовании return
. В конце концов, есть еще неперехваченное исключение.
Означает ли это, что функция Python может либо raise
, либо return
, но return
автоматически очистит исключение?