Форум сайта python.su
0
FerromanА почему нельзя написать:
Простейший пример:Закрыть файл нужно в любом случае - в не зависимости произойдёт ошибка в блоке try или нет.try:
f = open('file', 'w')
# do something with file content
except:
print 'fail'
finally:
f.close()
try:
f = open('file', 'w')
# do something with file content
except:
print 'fail'
f.close()
Офлайн
0
# 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()
Офлайн
20
> А почему нельзя написать
Можно написать. Но почти всегда нужно пропускать исключение дальше, но так же закрывать файл/освобождать-лок и т.д. finally выполняется и в случае исключений и в случае нормального продолжения исполнения кода и если в блоке try стоит return.
Но я считаю что со временем finally будет вытеснен with. Писать “большой” код с потенциальными ошибками в finally не положено, он как бы только для освобождения ресурсов, закрытия файловых дескрипторов и тому подобному, но с этим справляется и with и на мой взгляд выглядит чуть ли не привлекательнее чем try.
..bw
Офлайн
1
Да, всё время забываю об этой конструкции. Но мне finally как-то привычней.
Офлайн