Почему `finally: return 42` очищает неперехваченное исключение?

Сегодня этот интересный фрагмент кода Python был опубликован в Твиттере.

def f():
    try:
        raise KeyError
    finally:
        return 42


g = f()

При его выполнении f() возвращает 42, и в стеке нет исключений, как я ожидал. При замене return 42, например, на как оператор pass, исключение распространяется за пределы функции, как и ожидалось.

Однако мне интересно, почему это не так при использовании return. В конце концов, есть еще неперехваченное исключение.

Означает ли это, что функция Python может либо raise, либо return, но return автоматически очистит исключение?


person ThiefMaster    schedule 17.03.2015    source источник