Найти - Пользователи
Полная версия: в чем смысл finally?
Начало » Python для новичков » в чем смысл finally?
1 2
kirasole
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()
dimabest
# 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!!!') - код ниже выполнен не будет
bw
> А почему нельзя написать
Можно написать. Но почти всегда нужно пропускать исключение дальше, но так же закрывать файл/освобождать-лок и т.д. finally выполняется и в случае исключений и в случае нормального продолжения исполнения кода и если в блоке try стоит return.
Но я считаю что со временем finally будет вытеснен with. Писать “большой” код с потенциальными ошибками в finally не положено, он как бы только для освобождения ресурсов, закрытия файловых дескрипторов и тому подобному, но с этим справляется и with и на мой взгляд выглядит чуть ли не привлекательнее чем try.

..bw
Ferroman
Да, всё время забываю об этой конструкции. Но мне finally как-то привычней.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB