Блок Finally выполняется непосредственно перед оператором return в блоке try, как показано в примере ниже — возвращает False вместо True:
>>> def bool_return():
... try:
... return True
... finally:
... return False
...
>>> bool_return()
False
Аналогично, следующий код возвращает значение, установленное в блоке Final:
>>> def num_return():
... try:
... x=100
... return x
... finally:
... x=90
... return x
...
>>> num_return()
90
Однако при назначении переменной без оператора return в блоке Final почему значение переменной, обновленное блоком Final, не возвращается блоком Try? Является ли переменная из блока Final локальной областью действия в блоке Final? Или возвращаемое значение из блока try хранится в буфере памяти и на него не влияет присваивание в блокеfinally? Почему в приведенном ниже примере выводится 100 вместо 90?
>>> def num_return():
... try:
... x=100
... return x
... finally:
... x=90
...
>>> num_return()
100
Аналогично следующему примеру:
In [1]: def num_return():
...: try:
...: x=[100]
...: return x
...: finally:
...: x[0] = 90
...:
In [2]: num_return()
Out[2]: [90]
In [3]: def num_return():
...: try:
...: x=[100]
...: return x[0]
...: finally:
...: x[0] = 90
...:
In [4]: num_return()
Out[4]: 100
Подробнее здесь: https://stackoverflow.com/questions/626 ... te-in-fina
Наконец, всегда запускается непосредственно перед возвратом в блоке try, тогда почему обновление в блоке, наконец, не вл ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
WPF: В чем разница между try...finally и try..catch..finally в WPF, MVVM? [закрыто]
Anonymous » » в форуме C# - 0 Ответы
- 41 Просмотры
-
Последнее сообщение Anonymous
-