Alex2ndr
Июнь 2, 2010 14:38:43
Всем доброго времени суток!
Возник такой вопросик. Я сейчас занят одним проектом, где помимо прочего нужно читать информацию из файлов. Если быть точнее то из tar архива и из файлов с картинками(jpg). В результате разработки написали некоторое количество кода, но неожиданно обнаружили, что местами мы делаем open(), а вот close() нигде не делается (для tar это соответственно tarfile.TarFile). Файлы открываются только на чтение и закрываются вместе с закрытием программы.
Собственно вопрос:
Насколько такое поведение критично? Я понимаю что это не есть хорошо, но как красиво реализовать закрытие пока не знаю. А делать абы как не хочется.
Всем спасибо за внимание.
Zubchick
Июнь 2, 2010 18:20:52
file.close() достаточно красиво? :)
Alex2ndr
Июнь 2, 2010 21:12:13
UsCr
Красиво?
Там накручено MVC. Если делать абы как, то работа с данными( т е model) попадает в представление (view). Как это обойти я пока не придумал. Кроме того есть еще кое-какие мелкие проблемы. Не хочется ими морочится, но хочется знать что эта лень за собой может повлечь. Пока работает и так, конечно.
Alex2ndr
Июнь 3, 2010 10:46:28
Dimka665
with statement?
Идея хорошая. Спасибо. Попробую приделать.
Только вопрос теперь как это проверить…
ZZZ
Июнь 3, 2010 10:54:41
Что проверить?
После окончания блока with файл закрывается. Ясно и чётко.
Использую постоянно.
Alex2ndr
Июнь 3, 2010 11:36:53
ZZZ
После окончания блока with файл закрывается. Ясно и чётко.
Хорошо. А вот в таком случае что будет:
for flname in filelist:
with open(flname) as fl:
yield fl
Когда именно закроется fl?
Alex2ndr
Июнь 3, 2010 13:02:57
Daevaorn
При выходе из блока with
Т е после того как генератор закончит отдавать файлы? (кончатся имена в filelist)