Главная страница

книга заданий пайтон. книга практических заданий, pyton. Сборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python


Скачать 2.24 Mb.
НазваниеСборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python
Анкоркнига заданий пайтон
Дата02.10.2022
Размер2.24 Mb.
Формат файлаdocx
Имя файлакнига практических заданий, pyton.docx
ТипСборник упражнений
#709959
страница39 из 69
1   ...   35   36   37   38   39   40   41   42   ...   69

7.6. исключения


Во время выполнения программы много что может пойти не так: пользователь может ввести строковое значение вместо числового, может возникнуть ошибка деления на ноль, пользователь может запросить на открытие файл, которого не существует, да мало ли что. Все подобные ошибки называются исключениями (exception). По умолчанию программы, написанные на языке Python, прекращают свое выполнение при возникновении исключений. Но мы всегда можем предотвратить такое поведение, если заранее предпримем ряд мер.

Разработчик имеет возможность указать программе, в каком месте может возникнуть исключение, чтобы была возможность его перехватить и соответствующим образом обработать, тем самым защитив программу от аварийного завершения. Для этого в языке Python предусмотрено два ключевых слова, с которыми мы раньше не сталкивались: это try и except. Код, который может вызвать возникновение исключения, предусмотрительно помещается в блок try, следом за которым располагается альтернативный блок except. Когда в блоке try возникает исключение, выполнение программы немедленно переносится в соответствующий блок except без выполнения оставшихся инструкций в блоке try.

В каждом блоке except может быть явно указан тип исключения, для перехвата которого предназначен этот блок. Это можно сделать, указав необходимый тип исключения непосредственно после ключевого слова except. В этом случае только указанный тип исключения будет обрабатываться при помощи данного блока. Без указания конкретного типа исключения блок except будет перехватывать все возникающие исключения, которые ранее не были обработаны другими блоками except, принадлежащими тому же блоку try. Необходимо четко понимать, что инструкции из блока except будут выполнены только в случае возникновения исключения. Если же выполнение блока try пройдет нормально, следующие за ним блоки except будут просто пропущены, и выполнение программы продолжится с первой строки кода, следующей за последним блоком except соответствующего блока try.

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

# Запрашиваем имя файла у пользователя fname = input("Введите имя файла: ")

# Попытка открыть файл try:

inf = open(fname, "r") except FileNotFoundError: # Показываем сообщение и выходим из программы, если возникла проблема при открытии

# файла

print("Невозможно открыть файл '%s'. Выходим...") quit()

Данная версия программы будет аккуратно закрываться с предупреждением, если файл, к которому хочет обратиться пользователь, не существует по указанному адресу. И хотя иногда такое поведение программы будет приемлемым, чаще мы захотим дать пользователю возможность повторно ввести имя файла для открытия. При этом и со второй попытки у него может не получиться ввести правильное имя файла. Организуем цикл, успешный выход из которого возможен только после ввода корректного имени файла. Обратите внимание, что оба блока – try и except – находятся внутри цикла while.

# Запрашиваем имя файла у пользователя fname = input("Введите имя файла: ")

file_opened = False while file_opened == False: # Попытка открыть файл try:

inf = open(fname, "r") file_opened = True except FileNotFoundError: # Показываем сообщение и запрашиваем имя файла повторно print("Файл '%s' не найден. Попробуйте еще.") fname = input("Введите имя файла: ")

В начале программы у пользователя запрашивается имя файла. После этого переменной file_opened присваивается значение False, и цикл запускается в первый раз. В теле цикла размещается блок try с двумя строками кода. В первой из них выполняется попытка открытия файла. Если файла нет, будет сгенерировано исключение типа FileNotFoundError, в результате чего выполнение программы продолжится в соответствующем блоке except, тогда как вторая строка в блоке try так и останется невыполненной. В блоке except на экран выводится сообщение об ошибке и производится повторный запрос имени файла у пользователя.

Выполнение программы возвращается к первой строке цикла, где происходит проверка условия file_opened == False. Это условие возвращает истину, и программа вновь входит в блок try, пытаясь открыть файл, имя которого пользователь ввел повторно. Если и такого файла не существует, все повторится согласно описанному выше алгоритму. Если же файл найти удалось, исключения не возникает, и выполнение программы переходит ко второй строке в блоке try, где переменной file_opened присваивается значение True. В результате блок except пропускается, цикл возвращается на начало и тут же завершается, поскольку условие цикла не выполняется.

Концепция, описанная в данной главе, может быть использована для идентификации и обработки всех возможных исключений, которые могут возникать в процессе выполнения программы. Наличие блоков try и except позволит вам уберечь свою программу от аварийного завершения и должным образом обрабатывать все возникающие ошибки.
1   ...   35   36   37   38   39   40   41   42   ...   69


написать администратору сайта