УПРАЖНЕНИЯ
10-3 . Гость: напишите программу, которая запрашивает у пользователя его имя . Введенный
ответ сохраняется в файле с именем guest .txt .
10-4 . Гостевая книга: напишите цикл while, который в цикле запрашивает у пользователей
имена . При вводе каждого имени выведите на экран приветствие и добавьте строку с со-
общением в файл с именем guest_book .txt . Проследите за тем, чтобы каждое сообщение
размещалось в отдельной строке файла .
10-5 . Опрос: напишите цикл while, в котором программа спрашивает у пользователя, по-
чему ему нравится программировать . Каждый раз, когда пользователь вводит очередную
причину, сохраните текст его ответа в файле .
Исключения
Для управления ошибками, возникающими в ходе выполнения программы,
в Python используются специальные объекты, называемые исключениями. Если
при возникновении ошибки Python не знает, что делать дальше, создается объект
исключения. Если в программу включен код обработки исключения, то выполне-
ние программы продолжится, а если нет — программа останавливается и выводит
трассировку с отчетом об исключении.
Исключения обрабатываются в блоках
try
-
except
. Блок
try
-
except
приказывает
Python выполнить некоторые действия, но при этом также сообщает, что нужно де-
лать при возникновении исключения. С блоками
try
-
except
ваши программы будут
работать даже в том случае, если что-то пошло не так. Вместо невразумительной
трассировки выводится понятное сообщение об ошибке, которое вы определяете
в программе.
Обработка исключения ZeroDivisionError
Рассмотрим простую ошибку, при которой Python инициирует исключение. Ко-
нечно, вы знаете, что деление на ноль невозможно, но мы все же прикажем Python
выполнить эту операцию:
division.py
print(5/0)
Из этого ничего не выйдет, поэтому на экран выводятся данные трассировки:
Traceback (most recent call last):
File "division.py", line 1, in
print(5/0)
ZeroDivisionError: division by zero
196 Глава 10 • Файлы и исключения
Ошибка, упоминаемая в трассировке —
ZeroDivisionError
, — является объектом
исключения. Такие объекты создаются в том случае, если Python не может выпол-
нить ваши распоряжения. Обычно в таких случаях Python прерывает выполнение
программы и сообщает тип обнаруженного исключения. Эта информация может
использоваться в программе; по сути вы сообщаете Python, как следует поступить
при возникновении исключения данного типа. В таком случае ваша программа
будет подготовлена к его появлению.
Блоки try-except
Если вы предполагаете, что в программе может произойти ошибка, напишите блок
try
-
except
для обработки возникающего исключения. Такой блок приказывает
Python выполнить некоторый код, а также сообщает, что нужно делать, если при
его выполнении произойдет исключение конкретного типа.
Вот как выглядит блок
try
-
except
для обработки исключений
ZeroDivisionError
:
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
Команда
print(5/0)
, порождающая ошибку, находится в блоке
try
. Если код в бло-
ке
try
выполнен успешно, то Python пропускает блок
except
. Если код в блоке
try
порождает ошибку, то Python ищет блок
except
с соответствующей ошибкой
и выпускает код в этом блоке.
В этом примере код блока
try
порождает ошибку
ZeroDivisionError
, поэтому
Python ищет блок
except
с описанием того, как следует действовать в такой ситу-
ации. При выполнении кода этого блока пользователь видит понятное сообщение
об ошибке вместо данных трассировки:
You can't divide by zero!
Если бы за кодом
try
-
except
следовал другой код, то выполнение программы
продолжилось, потому что мы объяснили Python, как обрабатывать эту ошибку.
В следующем примере обработка ошибки позволяет программе продолжить вы-
полнение.
Использование исключений для предотвращения аварийного
завершения программы
Правильная обработка ошибок особенно важна в том случае, если программа
должна продолжить работу после возникновения ошибки. Такая ситуация часто
встречается в программах, запрашивающих данные у пользователя. Если програм-
ма правильно среагировала на некорректный ввод, она может запросить новые
данные после сбоя.
Создадим простой калькулятор, который выполняет только операцию деления:
Исключения 197
Достарыңызбен бөлісу: |