Вложенная попытка, за исключением, наконец, не работает, как ожидалось - PullRequest
1 голос
/ 24 марта 2020

У меня есть следующая примерная функция:

def test():
    try:
        try:
            x =1
        except:
            x = 2
        finally:
            print('X')
            x = 7
            return x
    except Exception:
        x=2
    finally:
        x = 9
        return x

print(test())

Исходя из этого, я ожидаю, что test () всегда возвращает 7 (первый возврат), но вместо этого возвращает 9, даже если он достиг x = 7 строка (напечатано 'X'). Как это может быть?

1 Ответ

3 голосов
/ 24 марта 2020

из документов :

Если присутствует предложение finally, предложение finally будет выполнено как последняя задача перед завершением оператора try. Предложение finally запускается независимо от того, выдает ли оператор try исключение.

(...)

  • Если предложение finally содержит оператор возврата, возвращаемое значение будет быть тем из оператора return предложения finally, а не значением
    из оператора return предложения try.

вы можете подумать, что у вас есть 2 finally предложений, но первый включен в первое предложение try, поэтому имеет смысл, что ваша функция возвращает 9

...