2010-08-02 5 views
9

Я нашел этот интересный элемент в блоге сегодня:Почему это делает то, что делает?

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

print "abc() is", abc() 

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

Спасибо, KR

+0

Хотя не совсем то же самое, хорошее обсуждение этого можно найти здесь: http://stackoverflow.com/questions/1611561/python-error-handling-with-try-finally – dave

+0

-1: did даже не пытайтесь найти окончательное утверждение в http://docs.python.org/reference/compound_stmts.html#the-try-statement –

ответ

10

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

это подробно объясняется в python docu

+0

все, что вы избили меня :) –

1

Перейти к попытке с указанием области деятельности:

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

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

0

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

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

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

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

Когда возвращение, перерыв или продолжить заявление выполняется в Ьгу люкс из попробовать ... наконец заявлении наконец положение также выполняется «на на пути .

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

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