Module (94%)
Section (70%)

Как создать собственное исключение: продолжение

Когда Вы собираетесь построить совершенно новую вселенную, наполненную совершенно новыми существами, которые не имеют ничего общего со всеми знакомыми вещами, Вы можете создать свою собственную структуру исключений.

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

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

class PizzaError(Exception): def __init__(self, pizza, message): Exception.__init__(self, message) self.pizza = pizza

Примечание: здесь мы собираем более конкретную информацию, чем обычная исключительная ситуация, поэтому наш конструктор будет принимать два аргумента:

  • указание пиццы в качестве субъекта процесса;
  • содержащий более или менее точное описание проблемы.

Как видите, мы передаем второй параметр конструктору суперкласса и сохраняем первый в нашем собственном свойстве.


Более конкретная проблема (например, избыток сыра) может потребовать более конкретного исключения. Можно получить новый класс из уже определенного класса PizzaError, как мы сделали здесь:

class TooMuchCheeseError(PizzaError): def __init__(self, pizza, cheese, message): PizzaError._init__(self, pizza, message) self.cheese = cheese

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



Code

class PizzaError(Exception):
def __init__(self, pizza, message):
Exception.__init__(self, message)
self.pizza = pizza


class TooMuchCheeseError(PizzaError):
def __init__(self, pizza, cheese, message):
PizzaError._init__(self, pizza, message)
self.cheese = cheese
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×