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

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

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

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

Поэтому не надо беспокоиться, если ваши сообщения не соответствуют в точности тем, что приводятся здесь. Например, когда я запускал этот пример в среде ЮЬЕ, входящей в состав Ру()гоп 2.б, в тексте сообщения выводились полные пути к файлам. Инструкция тгу/ехсерт/ейе тивной оболочке интерпретатора, имена файлов и номера строк содержат полезную для нас информацию. Например, здесь видно, что ошибка произошла во 2 строке в файле Ьасг ру, в инструкции гетогп. Так как интерпретатор РуФ)топ определяет и сообщает обо всех ошибках, появившихся во время выполнения программы, возбуждая исключения, эти исключения тесно связаны с идеями обработки ошибок и отладки вообще.

Если вы работали с примерами из етой книги, вы без сомнений встречались с несколькими исключениями — даже опечатки нередко приводят к возбуждению исключения ЗуптахЕггог или других при импортировании и выполнении файла (то есть, когда запускается компилятор).

По умолчанию интерпретатор выводит полезное информативное сообщение, как показано выше, которое позволяет легко отыскать источник проблем. Чаще всего для разрешения проблем достаточно стандартных сообщений об ошибках. Для более надежной отладки своих программ вы можете перехватывать исключения с помощью инструкций Тту или использовать средства отладки, которые будут представлены в главе 29, такие как модуль рбр из стандартной библиотеки.

Пример: перехват встроенных исключений Обработка исключений, которая выполняется интерпретатором по умолчанию, зачастую удовлетворяет всем нашим потребностям, особенно для программного кода верхнего уровня, где ошибки должны приводить к немедленному завершению программы. Для большинства программ нет никакой необходимости предусматривать какие-то особые варианты обработки ошибок. Однако иногда бывает необходимо перехватить ошибку и выполнить восстановительные действия после нее.

Если для вас нежелательно, чтобы программа завершалась, когда интерпретатор возбуждает исключение, достаточно просто перехватить его, обернув участок программы в инструкцию тгу. Это очень важная возможность для таких программ, как серверы сети, которые должны продолжать работать постоянно. Например, следующий фрагмент перехватывает и обрабатывает исключение ТуреЕг гог, которое возбуждается интерпретатором при попытке выполнить операцию конкатенации для списка и строки (оператор + требует, чтобы слева и справа были указаны последовательности одного и того же типа): оет Каооою(х, у); ргтпт х ч у № Возбуждает исключение ТурвЕггог тгу каоооеп0,1.2), "враз") ехсерт ТуреЕггог. '№ Исключение лерекватываетсл и обрабатывается здесн ргтпт 'Не11о иог1О)' ргшт гевоютпо пете' № Програииа продолжает работу, независиио от того, № было ли исключение или нет У1б Глава 27.

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

В некотором смысле это делает исключения более похожими на инструкции перехода, чем на вызовы функций — нет никакой возможности вернуться к программному коду, вызвавшему ошибку. Инструкция 1гу/ЯпаИу Другая разновидность инструкции С ту специализируется на выполнении завершающих действий. Если в инструкцию 1 ту включено предложение Гт па11у, интерпретатор всегда будет выполнять этот блок инструкций при «выходе» из инструкции С ту независимо от того, произошло ли исключение во время выполнения инструкций в блоке гту.

Общая форма этой инструкции имеет следующий вид: тгу <инструкции> № Выполнит» эти действия первыми Гтпв11у; <инструкции> № Всегда выполнят» этот блок кода при выходе иэ инструкции При использовании этой инструкции интерпретатор Ру(акоп в первую очередь выполняет инструкции в блоке ггу. Что произойдет дальше, зависит от того, возникло ли исключение в блоке сгу: ° Если во время выполнения инструкций в блоке сгу исключение не возникло, интерпретатор переходит к выполнению блока №1па11у и затем продолжает выполнять программу ниже инструкции 1гу.

° Если во время выполнения инструкций в блоке ггу возникло исключение, интерпретатор также выполнит инструкции в блоке Гтпа!1у, но после этого исключение продолжит свое распространение до вышестоящей инструкции сгу или до обработчика исключений по умолчанию — программа не будет выполняться вслед за инструкцией г ту. То есть инструкции в блоке №1пв11у будут выполнены, даже если исключение будет возбуждено, но в отличие от предложения ехсерг, Г то а11у не завершает распространение исключения — оно остается актуальным после выполнения блока т(па11у. Форма '. гугг№тпа11у бывает удобна, когда необходимо гарантировать выполнение некоторых действий независимо от реакции программы на исключение. С практической точки зрения эта форма инструкции по- Инструкция (гу/йпабу зволяет определять завершающие действия, которые должны выполняться всегда, такие как закрытие файлов или закрытие соединений с сервером.

Обратите внимание: в РуЕЬоп 2кй и в более ранних версиях предложение г'тпа11у не может использоваться в той же инструкции сгу, гдЕ ужс используется предложение ехсер1 или е1зе, поэтому форму (гу/етпапу лучше считать отдельной формой инструкции при работе со старыми версиями. Однако в РуФЬоп 2.5 предложение Гтпа11у может присутствовать в инструкции С ту вместе с предложениями ехсер( и е1зе, поэтому в настоящее время существует единая инструкция С ту, которая может употребляться с несколькими необязательными предложениями (вскоре мы поговорим об этом подробнее). Однако какую бы версию Ру$Ьоп вы не использовали, назначение предложения Еопа11у остается прежним — определить завершающие действия, которые должны выполняться всегда, независимо от возникновения исключений. о Как будет показано далее в этой главе, в версии Ру$Ьоп 2.6, инструкция имя и контекстные менеджеры обеспечивают объектноориентированный подход к выполнению аналогичных завершающих действий, но кроме того, эта инструкция поддерживает возможность выполнения действий по инициализации.

Пример: реализация завершающих действий с помощью инструкции тгу/ЯпаПу Выше мы видели несколько простых примеров применения инструк- ции сгу/(1па11у. Ниже приводится более близкий к реальности при- мер, иллюстрирующий типичное применение этой инструкции: с1асв муеггог(ехсерыоп): рааз Оет атос((тт1е): гатае МуЕггог() 'и') В Открвть файл длл ввеода Ф возбуждает исключение гт1е = орел('пата', ггу: атогг(гт)е) Гтпа11у: Гт1е.с1оае() л асегда закрывать файл, чтобв витолкнуть буферь Л Продолиить с этого места, Л шлько если нв боло исключения В этом фрагменте мы обернули вызов функции в инструкцию ггу, с предложением Етпа11у, чтобы гарантировать, что файл будет закрыт при любых обстоятельствах, независимо от того, будет возбуждено исключение в функции или нет.

При таком подходе расположенный далее программный код может быть уверен, что содержимое выходных буферов файла было вытолкнуто из памяти на диск. Подобная структура программного кода может гарантировать закрытие соединения с сервером и т. д. 718 Глава 27. Основы исключений Функция в этом примере не делает ничего полезного (она просто возбуждает исключение), но обернув ее в инструкцию С гу/Г! па11у, мы гарантируем, что действия по завершению будут выполняться всегда.

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

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

Объединенная инструкция тгу/ехсер1/ЯпаИу Во всех версиях Ру!Ьоп, вышедших до версии 2.5 (в течение первых 15 лет жизни, или что-то около того), инструкция сгу существовала в двух разновидностях, и в действительности имелось две отдельные инструкции. Мы могли либо использовать предложение г1па11у, чтобы гарантировать выполнение завершающего программного кода, либо писать блоки ехсерц чтобы перехватывать определенные исключения и выполнять действия по восстановлению после них и, при желании, использовать предложение е1зе, которое выполняется в случае отсутствия исключений. То есть предложение Г! па11у нельзя было смешивать с предложениями ехсер! и е1зе.

Такое положение дел сохранялось отчасти из-за проблем с реализацией, а отчасти из-за неясности смысла такого смешивания— перехват и восстановление после исключений выглядит никак не связанным с выполнением действий по завершению. Однако в Ру$Ьоп 2.5 (эта версия Ру(акоп используется в данном издании книги) две инструкции были объединены. Сейчас у нас имеется Если, конечно, сам интерпретатор не завершит свою работу аварийно.

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

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

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

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