Обработка исключений Python – это своеобразный и весьма мощный механизм, который позволяет управлять приложением при определенных обстоятельствах. С его помощью удается избежать аварийного завершения ввиду непредвиденных и внезапных багов.

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

Определение

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

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

Сегодня в Питоне выделяют такие типы ошибок:

  • синтаксические – причиной их возникновения становятся погрешности синтаксиса в коде;
  • логические – возникают из-за логических неточностей алгоритмов;
  • исключения – вызываются за счет некорректных действий юзеров или операционной системы.

Каждый вариант предусматривает собственные особенности и нюансы. Далее они будут рассмотрены более детально. Это поможет грамотно реагировать на баги и использовать имеющиеся знания для предельной результативности обработки исключений в Python.

Синтаксические

Возникают из-за того, что разработчик не соблюдал общепринятые нормы языка. Пример – пропустил круглую скобку в нужном месте или неграмотно прописал функции в блоке кодификации. Подобные погрешности хорошо отлавливаются посредством компилятора. Он сообщит программеру информацию об ошибке.

Вот пример, который покажет, что произойдет, если пропустить двойные кавычки при выводе строковых литералов:

Print (“Hello World!)

Программа при компиляции укажет следующий текст:

File “main.py”, line 1
Print (“Hello World!)
^
SyntaxError: EOL while scanning string literal

Логические

Это – наиболее сложный вариант для обнаружения. Связано это с тем, что отлов подобных неполадок не осуществляется при компиляции. Аналогичным образом дела обстоят и с готовым приложением.

Логические ошибки – это следствие недостатков в логике задействованных алгоритмов. Из-за этого программер не может достичь желаемого итога.

Исключения в Питоне от А до Я

Print (avg(10, 20))

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

Исключения

Исключения в Python – это последний тип багов. Он будет проявляться в зависимости от наличия тех или иных обстоятельств, меняющих ход работы программы.

Исключения обычно видно во время обработки кодификации. Ниже — пример, который указывает на невозможность проведения операции «деление на ноль»:

Print (10/0)

Если попытаться вывести на экран результат, утилита вызовет следующий код?

Исключения в Питоне от А до Я

Результат выполнения программы – это исключительная ситуация. Следствием станет аварийное завершение работы и вывод ошибки на дисплей. Тут отобразится файл, а также номер строчки кода, где обнаружено исключение ZeroDivisionError. Ниже – это краткое описание бага (Division by zero).

Перехват

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

О перехвате необходимо запомнить следующее:

  • процесс помогает миновать сбои в работе алгоритма;
  • достигнуть результата удается за счет расширения возможностей блока кода, которые позволяют действовать с учетом новых обстоятельств.

Вот пример попытки запуска утилиты, которая открывает текстовый документ:

Print (“Program started”)
Print (“Opening file…”)
F = open (“data.txt”)
Print (“Program finished”)

После того, как приложение будет обработано, на экране появится такая надпись:

Исключения в Питоне от А до Я

Здесь происходит следующее:

  1. Print написано грамотно.
  2. Утилита не будет выполняться, так как файл с указанным именем не найден на жестком диске устройства.
  3. Программное обеспечение сгенерировало исключение FileNotFoundError. Оно указывает на неполадки при вводе или выводе.
  4. Последняя строчка кода – это сообщение о завершении утилиты. Она не отображается. Это свидетельствует о том, что далеко не все операции, предусмотренные ПО, будут выполнены из-за обнаруженного исключения.

Теперь можно рассмотреть блок try except. Он позволит обработать исключительную ситуацию без завершения уже запущенного приложения со стороны пользователя:

Print (“Program started”)
Try:
Print (“Opening file…”)
F = open (“data.txt”)
Except:
Print (“File not found”)
Print (“Program finished”)
Исключения в Питоне от А до Я

Здесь:

  1. Блок try имеет опасную кодификацию, которая способна прервать функционирование утилиты.
  2. Except отвечает за инструкцию, которую необходимо обработать при баге.
  3. Программа вследствие обработки кодификации не завершается – об этом свидетельствует последний вывод функции print.

Данный прием при грамотном использовании позволяет в случае неполадок продолжить работу с софтом.

Несколько except

Теперь создадим несколько блоков except. В зависимости от того, какой тип исключения нужно обработать, будет меняться итоговый результат. Обычно соответствующей операции подлежат частные случаи, после – общие.

Исключения в Питоне от А до Я

Вот – наглядный пример exceptions.

Вложенные и else

Блоки типа try except могут выступать в виде вложенных, чтобы обеспечивать гибкое управление исключениями в Python.

Исключения в Питоне от А до Я

Для соответствующей кодификации требуется запомнить следующее:

  1. Она отвечает за демонстрацию попытки открытия текстового файла с записью в него определенной строки.
  2. Каждая цель задействует собственный блок try.
  3. Тут применяется конструкция с else, которая выполняется в случае, если в утилите нет корректировок.
  4. В приведенном примере else будет работать, если операция write будет успешно выполнена.
  5. По умолчанию документ открывается на чтение в текстовом режиме. При его открытии необходимо задействовать работу «w». Он отвечает за запись.

Если файла не было ранее на жестком диске, он будет создан в виде нового. В противном случае – производится перезапись. Все манипуляции выводятся на дисплей посредством print.

Finally

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

Исключения в Питоне от А до Я

Пример помогает улучшить приложение путем добавления возможности закрывать текстовый документ.

Чтобы упростить процесс коддинга, была разработана конструкция with/as. Она автоматизирует некоторые методы. Пример – закрытие файла заданного объекта. Результат все равно выводится через print.

Исключения в Питоне от А до Я

Утилита обрабатывает все типы исключений, во всех ситуациях завершается естественным путем. Заданный алгоритм не будет экстренно прерываться.

Управление

Упомянутый ЯП дает возможность создания пользовательских исключений. Логирование программы сюда тоже включено.

Исключения пользователя

Обычно они в нужных ситуациях вызываются самостоятельно. Чтобы применить оные, необходимо задействовать ключевое слово raise. Далее указывается создание нового объекта типа Exception. Его удастся позже обработать через обычные конструкции try-except:

print("Program started")
try:
    raise Exception("User Exception!")
except Exception as e:
    print(str(e))
print("Program finished")

Program started
User Exception!
Program finished

При создании собственного исключения нужно запомнить следующее:

  1. Для этого требуется создать новый класс, который будет наследником базового типа Exception.
  2. Соответствующий прием позволит осуществлять запуск особых видов исключений в ситуациях, когда юзер ведет себя не по заданному алгоритму.
  3. В конструкторе Exception прописывается текст исключения.
  4. После его обработки и схватывания удается извлечь оный через str.

Вот пример с исключением типа raises NegativeAge. Отвечает за невозможность указания отрицательного возраста юзера:

Исключения в Питоне от А до Я

Записывание в лог

В процессе изучения исключений, print, а также raise, recent call last, most recent call и иных особенностей Питона, может потребоваться запись в лог. Она помогает выводить спецсообщения, которые никак не отражаются на работоспособности утилиты.

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

Исключения в Питоне от А до Я

Здесь:

  1. Клиенту доступны разные виды сообщений, которые реализуются не через print. Задействованы они обычно при разработке, лишний текст в консоли не отображается.
  2. Logging позволяет осуществлять запись в лог.
  3. Уровень INFO – это указатель на то, что сообщения уровней ниже (debug) не отображаются в логе.

Итоговый код:

Исключения в Питоне от А до Я

В конце добавляется строка сообщения о типе одного сработавшего исключения в Python.

Иерархия

Исключения обладают строгой иерархией, которую нужно знать как print, in module, traceback и иные особенности языка. Вершина – это BaseException, который включает в себя все существующие типы исключений:

  • SystemExit – выход через sys.exit;
  • KeyboardInterrupt – прерывание пользователем;
  • GeneratorExit – отображается при вызове методы close для generator;
  • Exception – связь обычных несистемных исключений.

Здесь – таблица с исключениями несистемного плана в классе Exception.

Исключения в Питоне от А до Я