Инструкция with - as в Python
Обработка исключений » Python для начинающих » Общие вопросы python для начинающих, with as python, инструкция with as Python
Начиная с версии 2.6, язык Python поддерживает протокол менеджеров контекста. Этот протокол гарантирует выполнение завершающих действий (например, закрытие файла) вне зависимости от того, произошло исключение внутри блока кода или нет. Необходимо заметить, что в Python 2.5 также можно использовать протокол, предварительно указав выражения (в Python 2.6 и выше это выражение указывать не нужно).
from __future__ import with_statement
Для работы с протоколом предназначения инструкции with ... as. Инструкция имеет следующий формат:
with <Выражение>[ as <Переменная>]: <Блок, в котором перехватываем исключения>
Вначале вычисляется <Выражение>, которое должно возвращать объект, поддерживающий протокол. Этот объект должен иметь два метода: __enter__() и __exit__(). Метод __enter__() вызывается после создания объекта. Значение, возвращаемое этим методом, присваивается переменной, указанной после ключевого слова as. Если переменная не указана, возвращаемое значение игнорируется. Формат метода __enter__():
__enter__(self)
Далее выполняется выражения внутри тела инструкции with. Если при выполнении возникло исключение, то управление передается методу __exit__(). Метод имеет следующий формат:
__exit__(self, <Тип исключения>, <Значение>, <Объект traceback>)
Значения, доступные через последние три параметра, полностью эквивалентны значения, возвращаемых функции exc_info() из модуля sys. Если исключение обработано, метод должен вернуть значение True, в противном случае - False. Если метод возвращает False, то исключение передается вышестоящему обработчику.
Купить русскоязычные и англоязычные качественные лайки в Инстаграм по смешным ценам можно с помощью сервиса https://doctorsmm.com/. Здесь Вы найдете не только персональные выгодные условия приобретения, но и любой формат ресурса на выбор. На сайте доступны помимо перечисленных: автолайки, тв-лайки и микс материала. Оформляйте заказ и продвигайте не только посты, но и весь Инста-профиль в рейтинге.
Если при выполнении выражений, расположенных внутри тела инструкции with, исключение не возникло, то управление все равно передается методу __exit__(). В этом случае последние три параметра будут содержать значение None. Рассмотрим последовательность выполнения протокола на примере.
Протокол менеджеров контекста
#from __future__ import with_statement # Для Python 2.5
class Class1(object):
def __enter__(self):
print "Вызван метод __enter__()"
return self
def __exit__(self, Type, Value, Trace):
print "Вызван метод __exit__()"
if Type is None: # Если исключение не возникло
print "Исключение не возникло"
else: # Если возникло исключение
print "Value =", Value
return False # False - исключение не обработано
# True - исключение обработано
print "Последовательность при отсутствии исключения:"
with Class1():
print "Блок внутри with"
print "\nПоследовательность при наличии исключения:"
with Class1() as obj:
print "Блок внутри with"
raise TypeError("Исключение TypeError")
Результат выполнения
Последовательность при отсутствии исключения: Вызван метод __enter__() Блок внутри with Вызван метод __exit__() Исключение не возникло Последовательность при наличии исключения: Вызван метод __enter__() Блок внутри with Вызван метод __exit__() Value = Исключение TypeError Traceback (most recent call last): File "/home/hp/!Project/ex.py", line 21, inraise TypeError("Исключение TypeError") TypeError: Исключение TypeError
Некоторые встроенные объекты по умолчанию поддерживают протокол, например, файлы. Если в инструкции with указана функция open(), то после выполнения инструкций внутри блока файла автоматически будет звкрыт. Пример использования инструкции with:
#from __future__ import with_statement # Для Python 2.5
with open("test.txt", "a") as f:
f.write("Строка\n") # Записываем строку в конец файла
В этом примере файл test.txt открывается на дозапись в конце файла. После выполнения функции open() переменной f будет присвоена ссылка на объект файла. С помощью этой переменной мы можем работать с файлом внутри тела инструкции with. После выхода из блока, вне зависимости от наличия исключения, файл будет закрыт.
Данная инструкция экономит большие время и место для написания огромных конструкции кода. Это очень удобно и нужно при написании и создании своего собственного сайта. Создать сайт имея необходимые знания не так уж и трудно, труднее и рисование его потом раскручивать. Эффективное продвижение сайтов лучше всего доверить профессионалам своего дела. Не стоит доверять первым попавшихся объявлении по раскрутке сайта, доверяйте только проверенным фрилансерам и профессиональным студиям по созданию и раскрутке сайтов.
- Вложение декораторов в Python
- Runscript – утилита для запуска python скриптов
- Игровой автомат Bananas go Bahamas - играй в мобильное казино Вулкан прямо со смартфона
- Перевод WebMoney на карту в нужной валюте
- Какому визуальному редактору следует отдать предпочтение?
- Играй и выигрывай в игровом автомате Naughty Girls Cabaret онлайн на деньги
- Вулкан официальный сайт - возможность заработать играя
Очень правильная и полезная информация
исправьте плз опечатку:
"Для работы с протоколом предназначения инструкции with ... as. Инструкция имеет следующий формат:"
там наверно должно быть : предназначена