de-vraag
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Ron D.
Ron D.
Вопрос

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

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

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

Благодаря, Рон.

6 2011-10-27T15:56:03+00:00 3
Программирование
gzip
python
with-statement
Sven Marnach
27-го октября 2011 в 3:58
2011-10-27T15:58:04+00:00
Дополнительно
Источник
Редактировать
#56790376

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

from __future__ import with_statement
19
0
ekhumoro
27-го октября 2011 в 4:48
2011-10-27T16:48:07+00:00
Дополнительно
Источник
Редактировать
#56790378

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

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

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

3
0
Kirk Strauser
27-го октября 2011 в 4:12
2011-10-27T16:12:26+00:00
Дополнительно
Источник
Редактировать
#56790377

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

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

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

Контекстный менеджер с open () будет расширяться примерно до:

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

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

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

1
0
Похожие сообщества 30
Python
Python
15 512 пользователей
Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/802295
Открыть telegram
Python beginners
Python beginners
14 284 пользователей
Вопросы про Python для чайников. Cпам и троллинг неприемлем. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Правила группы: https://t.me/ru_python_beginners/1649981
Открыть telegram
🐍 Python Stepik Chat
🐍 Python Stepik Chat
7 772 пользователей
Этот уютный чат создан для помощи в решение задач на прекрасном курсе "Поколение Python: курс для начинающих" и не только. Правила: t.me/pythonstepikchat/316777 Чат для оффтопа - t.me/+fqNb78zlQY81NGUy Наш канал - @kimport_this
Открыть telegram
aiogram
aiogram
6 303 пользователей
Repo: https://github.com/aiogram/aiogram Site: https://aiogram.dev Полезная информация: https://t.me/aiogram_ru/168411
Открыть telegram
Python — вакансии и аналитика
Python — вакансии и аналитика
6 048 пользователей
Публикуем вакансии и запросы на поиск работы по направлению Python, Flask и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @golang_jobs, @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs
Открыть telegram
Сообщество Python Программистов
Сообщество Python Программистов
5 858 пользователей
Канал: @pip_install Наши сайты: https://python-scripts.com https://selenium-python.com https://itfy.org Мы в ВК: https://vk.com/open_sourcecode Вакансии: https://t.me/python_scripts_hr
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Roxana Elizabeth CASTILLO Avalos
Зарегистрирован 1 день назад
2
Hideo Nakagawa
Зарегистрирован 2 дня назад
3
Sergiy Tytarenko
Зарегистрирован 3 дня назад
4
shoxrux azadov
Зарегистрирован 6 дней назад
5
Koreets Koreytsev
Зарегистрирован 1 неделю назад
© de-vraag 2022
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией