Python 2.5.2 – что было вместо утверждения 'with'

Я написал свой код для python 2.7, но у сервера 2,5. Как переписать следующий код, чтобы он выполнялся в python 2.5.2:

gzipHandler = gzip.open(gzipFile) try: with open(txtFile, 'w') as out: for line in gzipHandler: out.write(line) except: pass 

Прямо сейчас, когда я пытаюсь запустить мой скрипт, я получаю эту ошибку:

Предупреждение: «с» станет зарезервированным ключевым словом в Python 2.6 Traceback (последний последний вызов): Файл «Main.py», строка 7, из файла Extractor import Extractor «/data/client/scripts/Extractor.py», строка 29 с открытым (self._logFile, 'w') как вне: ^ СинтаксисError: недействительный синтаксис

Спасибо, Рон.

3 Solutions collect form web for “Python 2.5.2 – что было вместо утверждения 'with'”

В Python 2.5 вы действительно можете использовать оператор with – просто импортируйте его из __future__ :

 from __future__ import with_statement 

Если вы не можете или не хотите использовать, используйте, finally :

 gzipHandler = gzip.open(gzipFile) out = open(txtFile, 'w') try: for line in gzipHandler: out.write(line) finally: out.close() gzipHandler.close() 

Код очистки в предложении finally всегда будет исключен, независимо от того, создано ли исключение или нет.

«Старая» версия кода внутри вашего блока try / except будет:

 out = open(txtFile, 'w') for line in gzipHandler: out.write(line) out.close() 

С with open() ... контекст-менеджером фактически то же самое здесь. Python автоматически закрывает файлы, когда их объекты собираются с мусором (подробнее см. Вопрос 575278 ), поэтому out будет закрыт, если по какой-либо причине функция, с которой он работает, перестает выполняться. Кроме того, ОС закроет файл, когда процесс Python завершится, если он по какой-то причине завершится катастрофически, прежде чем out.close() .

Менеджер контекстного меню with open() будет расширяться примерно до:

 out = open(txtFile, 'w') try: for line in gzipHandler: out.write(line) finally: out.close() 

См. Приведенную выше ссылку на «менеджер контекста» для объяснения. Итак, как это работает? Он открывает файл, выполняет блок кода, затем явно закрывает файл. Как работает «старая» версия, которую я описываю? Он открывает файл, выполняет ваш блок кода, затем неявно закрывает файл, когда его область завершена, или когда процесс Python завершается.

Сохранить, но для «явных» и «неявных» частей функциональность идентична.

  • python 'with', следует ли использовать contextlib.closing?
  • с заявлением о работе над классом
  • Как «открыть» список файлов и получить их ручки в python?
  • Откройте список файлов, используя / в качестве менеджера контекста
  • Как «с» лучше, чем try / catch, чтобы открыть файл в Python?
  • Контекстный менеджер Python в нескольких строках
  • Является ли Python * с инструкцией *, точно эквивалентной блоку try - (except) - finally?
  • С заявлением в python возвращается объект None, хотя метод __init__ работает
  • Использование Python's 'with open ()' Чтобы записать журнал, как я могу писать исключения из своего журнала?
  • Python - лучший язык программирования в мире.