В этом посте я писал почему работа с файлами и другими объектами, требующими гарантированного закрытия должна должна производиться через with. Однако кроме минуса в виде добавления в код лишнего уровеня вложенности with еще и решает только часть проблемы - если код обработки файла не локален (нужно возвращать дескриптор в вызывающий код или хранить неопределенное время) with не может помочь. И собственно никто вообще не может помочь - суровая реальность состоит в том, что python не гарантирует вызов деструктора объекта. Т.е. если вы работаете на CPython, и не создаете циклических ссылок, то за крайне редкими исключениями деструктор будет вызываться вовремя. Но если вы используете ironpython/jython/pypy то ситуация становится совсем печальна.
October 30, 2012
October 28, 2012
Зачем в python with
Долгое время при работе с файлами из python я писал примерно следующий код:
Без подсветки синтаксисаdef some_func(fname):
fd = open(fname)
some_data_processing(fd.read())
return result
def some_func(fname): fd = open(fname) some_data_processing(fd.read()) return result
Тут предполагается, что в любом случае при выходе из функции переменная fd уничтожится и вместе с ней закроется файл и все будут жить долго и счастливо.
Но что будет если в some_data_processing произойдет исключение?
Subscribe to:
Posts (Atom)