Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2011 01:27:29

kirasole
От:
Зарегистрирован: 2010-12-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

в чем смысл finally?

Ferroman
Простейший пример:
try:
f = open('file', 'w')
# do something with file content
except:
print 'fail'
finally:
f.close()
Закрыть файл нужно в любом случае - в не зависимости произойдёт ошибка в блоке try или нет.
А почему нельзя написать:
try:
f = open('file', 'w')
# do something with file content
except:
print 'fail'
f.close()



Офлайн

#2 Янв. 24, 2011 14:03:43

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

в чем смысл finally?

# coding: utf8

def test1():
try:
print 'open file'
1/0
except:
print 'catch exception'
return
print 'close file'


def test2():
try:
print 'open file'
1/0
except:
print 'catch exception'
return
finally:
print 'close file'

print 'WITHOUT finally:'
test1()
print '\nWITH finally:'
test2()
return в перой функции можно заменить на генерацию другого исключения raise или raise ValueError('omg, error!!!') - код ниже выполнен не будет



Офлайн

#3 Янв. 24, 2011 14:49:49

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

в чем смысл finally?

> А почему нельзя написать
Можно написать. Но почти всегда нужно пропускать исключение дальше, но так же закрывать файл/освобождать-лок и т.д. finally выполняется и в случае исключений и в случае нормального продолжения исполнения кода и если в блоке try стоит return.
Но я считаю что со временем finally будет вытеснен with. Писать “большой” код с потенциальными ошибками в finally не положено, он как бы только для освобождения ресурсов, закрытия файловых дескрипторов и тому подобному, но с этим справляется и with и на мой взгляд выглядит чуть ли не привлекательнее чем try.

..bw



Офлайн

#4 Янв. 25, 2011 01:23:31

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

в чем смысл finally?

Да, всё время забываю об этой конструкции. Но мне finally как-то привычней.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version