Почему это делает то, что делает? - PullRequest
9 голосов
/ 02 августа 2010

Я нашел этот интересный предмет в блоге сегодня:

def abc():
    try:
        return True
    finally:
        return False

print "abc() is", abc()

Может кто-нибудь сказать, почему он делает то, что делает?

Спасибо, KR

Ответы [ 3 ]

10 голосов
/ 02 августа 2010

Если блок finally содержит оператор return или break, то результат из блока try отбрасывается

, что подробно объясняется в документе python

1 голос
/ 02 августа 2010

Перейти в область оператора try:

http://docs.python.org/reference/compound_stmts.html

Оператор finally все еще выполняется. Действительно интересная ситуация, хотя. Я узнал что-то новое. :)

0 голосов
/ 03 августа 2010

Спасибо за указатель на документы.Я не мог пройти мимо «возврата True», даже подумать о том, чтобы посмотреть туда.

Часть документации гласит:

Если, наконец, присутствует, он определяет обработчик «очистки», Выполнено предложение try, ...

, которое предполагает выполнение возвращаемого значения True.Однако позже это поясняется:

Когда оператор return, break или continue выполняется в наборе try оператора try ... finally, предложение finally также выполняется «на выходе».. '

Что объясняет наблюдаемое поведение.

Какой тип ума в первую очередь придумал бы такой код?;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...