Главная » Просмотр файлов » Лутц М. - Изучаем Python

Лутц М. - Изучаем Python (1077325), страница 155

Файл №1077325 Лутц М. - Изучаем Python (Лутц М. - Изучаем Python) 155 страницаЛутц М. - Изучаем Python (1077325) страница 1552018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 155)

Возможность передачи данных непосредственно с самим исключением обеспечивает более надежный доступ к ним в инструкции тгу. Строго говоря, дополнительные данные имеются у каждого исключения: как в случае с возвращаемыми значениями функций, если данные не были переданы явно, то в качестве таких данных используется специальный объект Моле. Следующий фрагмент, та(аег(а1а.ру, иллюстрирует действие этой концепции на примере простых исключений на базе строк: 724 Глава 27.

Основы исключений гатве еуЕхсер(топ оет тгуег(гопс); ггу Гипс() № Вызвать Гылс ехсер! еуЕхсерт)оп, ехтга1пто № перехватить исключение с данныии ргтпг до! Тшв . вхтга1пго № Данные были переданы явью Здесь функция сгуег всегда запрашивает получение объекта с дополнительными данными — он поступает из функции га1вег! в виде явно заданной строки, а из функции га(еег2 — в виде объекта Попе, используемого по умолчанию. В следующей главе мы увидим, что тот же самый прием может использоваться для организации доступа к экземплярам при использовании исключений на базе классов — в этом случае переменной в предложении ехСЕР1 присваивается ССЫЛКа на эКземпляр кЛасса исКлючения, который обеспечивает доступ к присоединенной информации и к методам класса.

Пример: повторное возбуждение исключений с помощью инструкции га1зе Инструкция гатве, в которой отсутствует имя исключения или дополнительные данные, просто повторно возбуждает текущее исключение. В таком виде она обычно используется, когда необходимо перехватить и обработать исключение, но при этом не требуется деактивировать исключение: »> 1гу: га1ве 1пбвхЕггог, 'арве' ехсерс 1пбехЕггог: рг1пс 'ргорадагвпд' га1ве ргорадвттпд тгасеьаси (еовг тесен( са11 1авт). ЕТ1е т<втетп>", 1тпе 2, ап ч 1псехЕггог: врва При таком использовании инструкция га1ве повторно возбуждает ис- ключение, которое затем передается обработчику более высокого уров- ня или обработчику по умолчанию, который останавливает выполне- ние программы и выводит стандартное сообщение об ошибке.

% русвоп »> Ггоа га1веоа1а 1арог1 »> Сгуег(га1вег1) дог 1лтв; Пе11о »> Сгуег(га1вег2) дот тшв. попе № Возбудить исключение, предполагается Поле № Дополнительные данные - Поле по уиолчанию Инструкция амег! Инструкция алегре Язык Ру!)>оп включает инструкцию аззег! в качестве особого случая возбуждения исключений. Это сокращенная форма типичного шаблона использования инструкции га)ве, которая представляет собой условную инструкцию гатве. Инструкция в форме: аввегт <тев!>, <Сага> я Часта <бата> является необязательной представляет собой эквивалент следующего фрагмента: !Г бЕЬпд 11 пот <1евт>: га!ве Аввегт!опЕггсг, <ба1а> Другими словами, если условное выражение возвращает ложное значение, интерпретатор возбуждает исключение: элемент данных (если присутствует) играет роль дополнительных данных исключения.

Как и все исключения, исключение Авзегт!спЕггсг приводит к завершению программы, если не будет перехвачено инструкцией ! гу. Существует дополнительная возможность удалить все инструкции азвег! из скомпилированного байт-кода программы за счет использования флага командной строки -О при запуске интерпретатора и тем самым оптимизировать программу.

Исключение Авве г! топЕ г го г является встроенным исключением, а имя беэцд — встроенным флагом, который автоматически получает значение 1 (истина), когда не используется флаг -О. Пример: проверка соблюдения ограничений (но не ошибок) Обычно инструкция аввег! используется для проверки условий выполнения программы во время разработки. При отображении в текст сообщений об ошибках, полученных в результате выполнения инструкции аввегт, автоматически включается информация из строки исходного программного кода и значения, перечисленные в инструкции. Рассмотрим файл аазег!егруг сег г(х).

аввег! х < С, 'х ачзт Ье педа<1че' гетчгп х * ° 2 % ру!Ьоп »> 1арогт аввегтег »> азвегтег.т(1) тгасеьаск (аоз1 гесепт са11 1ав!): Гые "<в!с!я>", 1>пе 1, )п ? Е(1е "аввегтег.ру", 1!па 2, тп Г аввегт х < О, х аов! Ье пера!тче Аввегт!ЬпЕггог: х ачвт Ье ведат!че Важно не забывать, что инструкция аввег! главным образом предназначена для проверки соблюдения ограничений, накладываемых про- 726 Глава 27. Основы исключений граммистом, а не для перехвата настоящих ошибок.

Так как интерпретатор Ру!Поп в состоянии сам выявлять ошибки во время выполнения программы, обычно нет необходимости использовать аввет! для выявления таких проблем, как выход индекса за допустимые пределы, несоответствие типов или деление на ноль: Оет тес!ртоса1(х): азветт х '= О № бесполезная инструкция аваетт! те!ото 1 / х № Интерпретатор автоматически проверит на равенство нулю Такие инструкции аввет! являются лишними, потому что встретив ошибку, интерпретатор автоматически возбудит исключение и вы вполне могли бы положиться в этом на него.' Еще один пример типичного использования инструкции аавет! приводится в примере абстрактного суперкласса в главе 24 — там инструкция авветг использовалась для того, чтобы вызов неопределенных методов приводил к исключению с определенным текстом сообщения.

Контекстные менеджеры алФ/ае В версии Ру!Ьоп 2.6 (на момент, когда писалась эта книга, данная версия еще не вышла) появится новая инструкция, имеющая отношение к исключениям — нтгл, с необязательным предложением ав. Эта инструкция предназначена для работы с объектами контекстных менеджеров, которые поддерживают новый протокол взаимодействия, основанный на использовании методов. Проще говоря, инструкция нтсл/ав может использоваться как альтернатива известной идиомы !ту)Г!па11у; подобно этой инструкции она предназначена для выполнения завершающих действий независимо от того, возникло ли исключение на этапе выполнения основного действия.

Однако, в отличие от инструкции !ту/Г!па11у, инструкция нт!и поддерживает более богатый возможностями протокол, позволяющий определять как предварительные, так и заключительные действия для заданного блока программного кода. Язык РуЖоп дополняет некоторые встроенные средства контекстными менеджерами, например, файлы, которые закрываются автоматически, или блокировки потоков выполнения, которые автоматически запираются и отпираются.

Однако программист также может создавать с классами и свои контекстные менеджеры. По крайней мере, в большинстве случаев. Как предлагалось в четвертой части книги, проверка на наличие ошибки может использоваться в функ. ции, выполняющей расчеты длительное время нлн необратимые действия. Но даже в этом случае старайтесь не использовать чрезмерно специализированные нлн чрезмерно ограничительные проверки, т. к.

в противном случае это ограничит область применения вашего программного кода. 727 Контекстные менеджеры гйтМггав Основы использования Данная функциональная возможность официально станет частью языка Ру$]топ, только начиная с версии 2.6. В Ру1]топ 2.5 по умолчанию она еще не доступна — ее следует активировать с помощью специальной инструкции импорта, с которой мы уже встречались в этой книге при изучении модулей (так как появятся два новых зарезервированных слова и! 1Ь и ав, это новшество, как обычно, вводится постепенно): тгом Гптпге тарогт м11П втатемепт Когда эта инструкция тарос! выполняется в Ру!)топ 2.5, появляется возможность использовать новую инструкцию угттП и два новых зарезервированных слова.

Основная форма инструкции н!1М выглядит, как показано ниже: мЫП амрамение [ав переменнап]: барк юга Здесь предполагается, что заражение возвращает объект, поддерживающий протокол контекстного менеджера (вскоре я расскажу об этом протоколе подробнее). Этот объект может возвращать значение, которое будет присвоено переменной, если присутствует необязательное предложение ав. Обратите внимание, что результат амраиенип не присваивается переменной — результатом заражений является объект, который поддерживает контекстный протокол, а перененной может быть присвоено некоторое другое значение.

Объект, возвращаемый анрамениен, может затем выполнять предварительные действия перед тем, как будет запущен блок и! тп, а также завершающие действия после того, как этот блок будет выполнен, независимо от того, было ли возбуждено исключение при его выполнении. Некоторые встроенные объекты языка Ру$)топ были дополнены поддержкой протокола управления контекстом и потому могут использоваться в инструкции н!1М. Например, объекты файлов снабжены менеджером контекста, который автоматически закрывает файл после выполнения блока и!тп независимо от того, было ли возбуждено исключение при его выполнении: мттп преп!г с:!рутпоп!всг!ртв') ав ауг11е тпг 1тпе !и аутт1е рг1пт 11пе 1!пе = 1!пе.гер1асе('враз', 'ЯРАМ' ) .остальной пррграммнмй код..

Здесь вызываемая функция среп возвращает объект файла, который присваивается имени ву!!1е. Применительно к переменной ау!!1е мы можем использовать обычные средства, предназначенные для работы с файлами, — в данном случае с помощью итератора выполняется чтение строки за строкой в цикле !ог. 728 Глава 27. Основы исключений Однако данный объект поддерживает протокол управления контекстом, используемый инструкцией н11Л.

После того как инструкция н!111 начнет выполнение, механизм управления контекстом гарантирует, что объект файла, на который ссылается переменная зу111е, будет закрыт автоматически, даже если в цикле рог во время обработки файла произойдет исключение. Мы не будем рассматривать в этой книге многопоточную модель выполнения в языке Рус)«оп (за дополнительной информацией по этой теме вам следует обращаться к книгам, посвященным прикладному программированию, таким как «Ргойгашш1пй Ру1)топ»), но блокировка и средства синхронизации посредством условных переменных также поддерживаются инструкцией н(тл за счет обеспечения поддержки протокола управления контекстом: 1оск = тягааатпд.соси() и1тп 1осх.

Характеристики

Тип файла
DJVU-файл
Размер
11,21 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6353
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее