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 завершается.

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

  • Как вызвать tempfile.mkstemp () с помощью «с»? - или почему он не возвращает fd с __exit __ ()?
  • Импровизация замены для оператора «with» для Python 2.4
  • Возможно ли иметь необязательный оператор / as в python?
  • Реализация использования 'with object () как f' в пользовательском классе в python
  • Python StringIO и совместимость с оператором `with '(менеджер контекста)
  • С заявлением в python возвращается объект None, хотя метод __init__ работает
  • Контекстный менеджер для MySQLdb для Python
  • Открытие и закрытие файла в python
  • Условное выражение с инструкцией в Python
  • Является ли хорошей практикой зависимость от python с ... как выражение
  • Использование Python's 'with open ()' Чтобы записать журнал, как я могу писать исключения из своего журнала?
  • Python - лучший язык программирования в мире.