Как можно передать параметры в собственное исключение?

Можно передать параметры в собственное исключение, переопределив метод __init__ класса исключения. При создании экземпляра исключения в raise, параметры передаются как аргументы конструктора. Они сохраняются как атрибуты объекта исключения, к которым можно получить доступ в блоке except.

Пример:

   class MyCustomException(Exception):
    def __init__(self, message, error_code):
     super().__init__(message)
     self.error_code = error_code

   try:
    # ... код, который может вызвать исключение ...
    raise MyCustomException("Что-то пошло не так", 500)
   except MyCustomException as e:
    print(f"Ошибка: {e}, Код ошибки: {e.error_code}")
  

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

  1. Определение собственного класса исключения:
    Создайте класс, который наследуется от базового класса `Exception` или от любого другого встроенного или пользовательского класса исключений.
  2. Инициализация с параметрами:
    В методе `__init__` класса исключения примите параметры, которые хотите передать, и сохраните их как атрибуты экземпляра класса. Важно вызвать `super().__init__()` для корректной инициализации базового класса.
  3. Использование параметров в `__str__` или других методах:
    Переопределите метод `__str__`, если необходимо, чтобы включить значения параметров в строковое представление исключения. Это полезно при выводе исключения или записи его в лог.
  4. Доступ к параметрам при обработке исключения:
    В блоке `try...except` при перехвате исключения, доступ к переданным параметрам осуществляется через атрибуты экземпляра исключения.

Пример:


class MyCustomError(Exception):
    def __init__(self, message, error_code):
        super().__init__(message)  # Вызов конструктора базового класса
        self.error_code = error_code  # Сохраняем код ошибки
        self.message = message # Сохраняем сообщение об ошибке (не обязательно, но полезно)

    def __str__(self):
        return f"MyCustomError: {self.message}, Error Code: {self.error_code}"


try:
    # ... код, который может вызвать исключение ...
    raise MyCustomError("Произошла ошибка в обработке данных", 500)
except MyCustomError as e:
    print(e)  # Выведет: MyCustomError: Произошла ошибка в обработке данных, Error Code: 500
    print(f"Код ошибки: {e.error_code}") # Выведет: Код ошибки: 500
    # ... обработка исключения ...
  

Объяснение:

  • `MyCustomError` - это наш класс исключения.
  • В `__init__` мы принимаем `message` (текст ошибки) и `error_code` (числовой код ошибки).
  • Мы вызываем `super().__init__(message)` для инициализации базового класса `Exception` с сообщением об ошибке.
  • Мы сохраняем `error_code` как атрибут `self.error_code`.
  • Метод `__str__` переопределён для предоставления более информативного строкового представления исключения.
  • В блоке `except` мы получаем доступ к атрибуту `error_code` экземпляра исключения `e`.

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

0