Обработка собственных исключений python

Создание настраиваемых исключений в Python

Создание настраиваемых исключений в Python

  1. Создайте собственный класс исключений в Python
  2. Выполнение обработки исключений с помощью блока try. except в Python

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

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

Создайте собственный класс исключений в Python

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

Давайте протестируем этот метод, чтобы создать класс исключения с именем DemoException и использовать ключевое слово потока управления заполнителем pass внутри в качестве заполнителя.

class DemoException(Exception):  pass 

Выполнение вызова исключения с использованием ключевого слова raise в Python

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

Используя ключевое слово raise , запускает исключение, используя данный класс исключения, и выводит сообщение об исключении.

class DemoException(Exception):  pass  raise DemoException 
Traceback (most recent call last):  File "/Users/demo/python/demo_exception.py", line 4, in  raise DemoException __main__.DemoException 

Стандартное исключение будет выглядеть в терминале, если не было объявлено настраиваемое сообщение об исключении.

Объявление настраиваемого сообщения об исключении в Python

Чтобы объявить настраиваемое сообщение об исключении для DemoException , переопределите метод __init__() класса исключения и включите в параметры сообщение, которое должно выводиться для исключения, вместе с обязательным параметром ссылки на себя self .

Например, переопределим метод __init__() и создадим собственное сообщение для класса DemoException :

class DemoException(Exception):  def __init__(self, message):  super().__init__(message) 

Обратите внимание, что для успешной интеграции сообщения в ваше исключение вызовите базовый класс Exception , метод __init__() и включите message в качестве аргумента.

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

class DemoException(Exception):  def __init__(self, message):  super().__init__(message)  message = "Exception Triggered! Something went wrong." raise DemoException(message) 

Результат должен выглядеть так:

Traceback (most recent call last):  File "/Users/demo/python/helloworld.py", line 6, in module>  raise DemoException(message) __main__.DemoException: Exception Triggered! Something went wrong. 

Теперь мы успешно создали и запустили класс исключения с настраиваемым сообщением об ошибке.

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

Выполнение обработки исключений с помощью блока try. except в Python

Блок try. except очень похож на блок try-catch в других языках, таких как Java.

  • try (обязательно) — основной блок, отвечающий за инкапсуляцию блока кода, в котором может быть вызвано исключение. Блок try останавливает весь процесс в нем при возникновении исключения.
  • except (обязательно) — программа блока продолжается всякий раз, когда инициируется указанное исключение. Этот блок обычно содержит описательное сообщение об ошибке для вызывающего абонента или просто простую инструкцию print() . В одном блоке try может быть более одного блока except , каждый из которых перехватывает разные исключения.
  • else (необязательно) — в этом необязательном блоке программа продолжит работу, если блок try не вызвал никаких исключений.
  • finally (необязательно) — этот необязательный блок запускается после того, как все из предыдущих 3 блоков было выполнено, независимо от того, инициировано ли исключение или нет.

Давайте воспользуемся предыдущим примером с использованием класса DemoException , чтобы попробовать простой блок try. except .

Сначала оберните ключевое слово raise в функцию и поместите его в блок try. except .

Функция, которую мы создадим для этого примера, — это функция, которая принимает число и выдает исключение, если оно отправляет 0 . Если он отправит любой другой номер, то код будет работать так, как задумано. Посмотрите пример ниже:

class DemoException(Exception):  def __init__(self, message):  super().__init__(message)  message = "Exception Triggered! Something went wrong."  def triggerException(num):  if (num == 0):  raise DemoException(message)  else:  print(num)  try:  triggerException(0)  print("Code has successfully been executed.") except DemoException:  print("Error: Number should not be 0.") 

Поскольку triggerException() передало 0 в качестве аргумента, код должен вызвать DemoException . Здесь мы должны ожидать, что сообщение с ключевым словом raise будет заменено тем, что находится внутри блока except в качестве вывода.

Обратите внимание, что строка print() после вызова функции triggerException() не выводилась. Это потому, что функция вызвала исключение; поэтому он немедленно остановил все процессы в блоке try и перешел непосредственно к блоку except .

Error: Number should not be 0. 

Теперь давайте попробуем передать допустимое число, например, 20 .

try:  triggerException(20)  print("Code has successfully been executed.") except DemoException:  print("Error: Number should not be 0.") 
20 Code has successfully been executed. 

Попробуем объединить блоки except и создать еще одно исключение. Назовем новое исключение NumberFormatException , которое срабатывает, если заданный вход не является числом. Для этого класса исключения давайте объявим сообщение внутри класса.

class NumberFormatException(Exception, value):  message = f'value> is not a number'  def __init__(self):  super().__init__(message) 

Теперь измените приведенный выше код для обработки нового класса исключения NumberFormatException :

class DemoException(Exception):  def __init__(self, message):  super().__init__(message)  class NumberFormatException(Exception):  def __init__(self, message, value):  message = f'value> is not a number'  super().__init__(message)  message = "Exception occured."  def triggerException(num):  if (not num.isdigit()):  raise NumberFormatException(message, num)  elif (num == 0):  raise DemoException(message)  else:  print(num)  num = "sample string" try:  triggerException(num)  print("Code has successfully been executed.") except DemoException:  print("Error: Number should not be 0.") except NumberFormatException:  print(num+" is not a number.") 

В этом коде значение num , которое было передано в triggerException() , является строкой ‘sample string’ , поэтому должно сработать NumberFormatException .

sample string is not a number. 

Таким образом, создание пользовательских исключений в Python так же просто, как создание нового класса, но с классом Exception в качестве дополнительного аргумента в определении класса. Ключевое слово raise используется для запуска исключений с учетом класса исключения. Блоки try. except используются для обертывания одного или нескольких исключений в блоке кода и изменения того, что делает код при обработке этого исключения, а не просто для полного завершения программы.

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

Сопутствующая статья — Python Exception

Источник

Читайте также:  Python check folder exists and create
Оцените статью