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

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

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

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

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

Предложения инструкции 1ту В инструкции с гу могут присутствовать разные предложения, располагающиеся вслед за блоком с гу. В табл. 27.1 приводятся все возможные формы, из которых хотя бы одна должна присутствовать. Мы уже встречали некоторые из них: как вы уже знаете, предложение ехсерс перехватывает исключения, предложение 11па11у выполняется при выходе из инструкции, а предложение е1ве выполняется, когда в блоке ггу не возникло исключение. С точки зрения синтаксиса, в инструкции может присутствовать несколько предложений вхсерс, но только одно предложение е1ве. Вплоть до версии Ру(поп 2.4 предложение 11па11у должно быть единственным (без предложений е1ве или ехсерг); в действительности это отдельная инструкция.

Однако, начиная с версии Ру(Ьоп 2.5, предложение 11па11у может присутствовать в той же инструкции, что и предложения ехсерс и е1ве. нсгрукция 1гу/ехсер1/е(ае Форма предложения Интерпретация ехсер1 (пааеп, паее2) . Перехватывает любое из перечисленных исключений. Перехватывает любое из перечисленных исключений и получает соответствующие им дополнительные дан- ные.

ехсер1 (паве1, паве2), ха1пе: Выполняется, если не было исключений. Этот блок выполняется всегда. е1ае. (гпа!1у: Исследованием дополнительного значения уа1ое мы займемся, когда будем рассматривать инструкцию га1зе. Новыми здесь для нас являются первая и четвертая строки в табл. 27. 1: ° Предложения ехсер1, в которых отсутствуют имена исключений (ехсер1 ), перехватывают все исключения, ранее не перечисленные в инструкции Егу. ° Предложения ехсер1, где в круглых скобках перечислены имена исключений (ехсер1 (е1, е2, еЗ);), перехватывают любое из перечисленных исключений. 1гу: ар(гоп() ЕхСЕР1 ЯазеЕггог.

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

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

В некоторых случаях эта форма может быть более удобна, чем перечисление всех возможных исключений в инструкции 1 ту. Например, в следующем примере выполняется перехват всех исключений: (гу; асыоп() ехсерт № Перекватить все воамоаные исклю~е~ия о ,3 В версии Ру(Ьоп 3.0 предполагается изменить форму, представленную в третьей строке табл. 27.1: вхсерт паюв, ча1ов, планируется преобразовать в форму ехсерт паве аэ ча1ое; . Этим изменением предполагается ликвидировать возможность перепутать эту форму со случаем, когда в предложении ехсерт указывается кортеж имен исключений — в версии РуЕЬоп 3.0 форма в четвертой строке табл.

27.1 больше не будет требовать наличия круглых скобок. Это изменение также приведет к изменению правил области видимости: с введением новой синтаксической конструкции ав переменная ча1ве будет удаляться в конце блока ехсеш. Кроме того, в версии 3.0 разновидность инструкции га1ве Е, ч должна будет записываться как гатве Е(У), чтобы явно обозначить Однако применение пустых предложений ехсерг влечет за собой определенные проблемы проектирования. Несмотря на удобство, они могут перехватывать нежелательные системные исключения, не связанные с работой вашего программного кода, и по случайности прерывать распространение исключений, предназначенных для других обработчиков.

Например, даже выход из программы в языке РуФЬоп возбуждает исключение, и поэтому было бы желательно, чтобы это исключение было пропущено. Но пока я скажу лишь, что предложение ехсер( требует внимательного отношения. Инструкция тгууехсертгейе создание класса, который будет играть роль возбуждаемого исключения. Предыдущая форма будет сохранена для обратной совместимости со строковыми исключениями в РуФ)топ 2.х. (Далее в этой главе подробнее рассказывается об инструкции гатзе, а в следующей главе рассказывается об исключениях на базе классов.) В настоящее время невозможно использовать форму аз предложеяия ехсерт в Ру1)топ 2.х, чтобы подготовить свой программный код к грядущим изменениям, однако в составе Ру$)топ 3.0 будет распространяться инструмент преобразования я21оЗч, который автоматически будет выполнять преобразования предложения ехсерт и инструкции гавае в написанном для версии РуФЬоп 2.х программном коде.

Предложение 1гу/е! бе Назначение предложения е1зе в инструкции тгу на первый взгляд не всегда очевидно для тех, кто только начинает осваивать язык Ру$)топ. Тем не менее, без этого предложения нет никакого другого способа узнать (не устанавливая и не проверяя флаги) — выполнение программы продолжилось потому, что исключение в блоке 1 ту не было возбуждено, или потому, что исключение было перехвачено и обработано: тту. выполняеный код...

ехсерт 1поехЕггог. ...обработка исключения... п Программа оказалась здесь потону, что исключение было обработано й ипи пото~у, что его не возникло? Точно так же, как предложение е1зе в операторах цикла делает причину выхода из цикла более очевидной, предложение е1зе в инструкции 1 ту однозначно и очевидно сообщает о произошедшем; тгу .,выполняемый код... вхсерт 1повхЕггог ,обработка исключения, в1зе исключение нс было возбуидено То же самое поведение можно имитировать, переместив содержимое блока е1зе в блок тгу: тгу ... выполняемый код...

...исключение не было возбуядено... ехсерт 1псехеггог. ...обработка исключения... Но это может привести к некорректной классификации исключения. Коли какая-либо из инструкций в блоке висключение не было возбужденов приведет к появлению исключения 1пбехЕггог, оно будет зарегистрировано как ошибка в блоке с ту и, соответственно, ошибочно будет 714 Глава 27. Основы исключений передано обработчику исключения ниже (тонко, но верно!). При явном использовании выражения е1ае логика выполнения становится более очевидной и гарантируется, что обработчики исключений будут вызываться только для обработки истинных ошибок в блоке, обернутом инструкцией 1гу, а не при выполнении действий, предусматриваемых в блоке е1ве.

Пример: поведение по умолчанию Поскольку объяснить порядок выполнения программы проще на языке Ру1)гоп, чем на естественном языке, рассмотрим несколько примеров, иллюстрирующих основы исключений. Я уже упоминал, что исключения, не перехваченные инструкциями 1 гу, распространяются до самого верхнего уровня процесса и запускают логику обработки исключений по умолчанию (то есть интерпретатор аварийно завершает работающую программу и выводит стандартное сообщение об ошибке). Рассмотрим пример. При попытке запустить следующий модуль Ьаг(.ру возникает исключение деления на ноль: Ое( дооас(х, у); гегцгп х гг У оег доаоц1щх): рг>п1 дооао(х, О) дозоцгп()) Так как программа сама не обрабатывает это исключение, интерпретатор завершает ее и выводит сообщение % ру1поп Ьаз.ру тгасеьаск (зоз1 гесеп1 са11 1ааг); Е>!е "Ьас,ру", 1>пе 7, >и <зооц1е> дозоып()) Е! 1е "ьаз, ру", 1ше 5.

>и дозоц(П рггп1 доьао(х. О) Е>1е "Ьас ру', !ше 2, гп доЬас ге!ого х г' у 2ЕГОЬ!х>ЩОПЕгГОГ >ЩЕ9ЕГ О>Н>а!ад ОГ ЗООЦ1О ЬУ ЛЕГО (2его0>у>агопЕггог целочисленное деление или деление по модулю на ноль) Сообщение состоит из содержимого стека и имени (с дополнительными данными) исключения. В содержимом стека перечислены все строки, которые были активны в момент появления исключения, в порядке от более старых к более новым. Обратите внимание: так как в данном случае мы работаем в командной строке системы, а не в интерак- Текст сообщений и отладочная информация время от времени немного изменяются.

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

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

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

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