Я наткнулся на странное поведение в Python. Я не смог найти информацию об этом в справке Python или на SE, так что здесь это:
def divide(x, y):
print 'entering divide'
try:
return x/y
except:
print 'error'
else:
print 'no error'
finally:
print 'exit'
print divide(1, 1)
print divide(1, 0)
Вывод:
entering divide
exit
1
entering divide
error
exit
None
Похоже, что Python не зайдет внутри else
, если значение возвращается В попробуй
. Однако он всегда будет идти в , наконец, в блоке
. Я действительно не понимаю, почему. Может кто-нибудь помочь мне с этой логикой?
Спасибо
http://docs.python.org/reference/compound_stmts.html#the-try-statement
Необязательное условие else выполняется, если и когда управляющие потоки от конца предложения try.
В настоящее время управление «вытекает из конца», за исключением случая исключения или выполнения оператора return, continue или break.
Блок else
не выполнен, потому что вы покинули функцию до того, как у нее появился шанс сделать это.
Однако, блок finally
всегда выполняется (если вы не дернули шнур питания или что-то в этом роде).
Рассмотрим это (как мысленный эксперимент; пожалуйста, не делайте этого в реальном коде):
def whoops():
try:
return True
finally:
return False
Посмотрите, что он возвращает:
>>> whoops()
False
Если вы находите это запутанным , ты не одинок. Некоторые языки, такие как C #, активно запрещают вам помещать оператор return
в предложение finally
.