Это какой-то код, который ведет себя необычно. Это упрощенная версия поведения, которое я написал. Это все равно продемонстрирует странное поведение, и у меня возникли конкретные вопросы о том, почему это происходит.
Я использую Python 2.6.6 в Windows 7.
def demo1():
try:
raise RuntimeError,"To Force Issue"
except:
return 1
else:
return 2
finally:
return 3
def demo2():
try:
try:
raise RuntimeError,"To Force Issue"
except:
return 1
else:
return 2
finally:
return 3
except:
print 4
else:
print 5
finally:
print 6
Полученные результаты:
>>> print demo1()
3
>>> print demo2()
6
3
- Почему демо-версия возвращает 3 вместо 1?
- Почему в демо-версии 2 печатается 6, а не 6 с 4 или 5?
источник
finally
блоки всегда запускаются.return
вызове оператора Python проверяет наличие любых открытыхfinally
предложений, которые необходимо выполнить (см. Цитату выше).Порядок исполнения:
Таким образом, любой возврат в блоке finally завершит шаги заранее.
источник