Можно ли в собственном исключении использовать несколько параметров? Приведите пример.

Да, в собственных исключениях можно использовать несколько параметров. Это достигается путем передачи этих параметров в конструктор класса исключения (`__init__`).

Пример:
  
  class CustomError(Exception):
      def __init__(self, message, code):
          super().__init__(message)
          self.code = code

  try:
      # ... какой-то код ...
      raise CustomError("Произошла ошибка", 500)
  except CustomError as e:
      print(f"Ошибка: {e}, Код: {e.code}")
  
  
В этом примере `CustomError` принимает `message` и `code` как параметры. `message` передается в конструктор родительского класса `Exception`, а `code` сохраняется как атрибут экземпляра исключения. При обработке исключения мы можем получить доступ к обоим параметрам (`e.message` и `e.code`).

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

Пример:


 class CustomError(Exception):
     def __init__(self, message, error_code, details=None):
         super().__init__(message)  # Вызываем конструктор базового класса
         self.message = message
         self.error_code = error_code
         self.details = details

     def __str__(self):
         return f"CustomError: {self.message}, Code: {self.error_code}, Details: {self.details}"


 try:
     # Представим ситуацию, когда происходит ошибка при обработке данных
     data = "invalid_data"
     if not data.isdigit():
         raise CustomError("Invalid data format", 1001, {"field": "data", "value": data})

 except CustomError as e:
     print(f"Произошла ошибка: {e}")
     print(f"Код ошибки: {e.error_code}")
     if e.details:
         print(f"Детали: {e.details}")

 

Объяснение:

  • Мы создаем класс исключения CustomError, наследующийся от базового класса Exception.
  • В конструкторе __init__ мы принимаем несколько параметров: message (текстовое описание ошибки), error_code (числовой код ошибки), и details (словарь с дополнительной информацией).
  • Вызываем конструктор базового класса Exception через super().__init__(message), чтобы корректно инициализировать сообщение об ошибке.
  • Сохраняем переданные параметры в атрибутах экземпляра исключения (self.message, self.error_code, self.details).
  • Переопределяем метод __str__ для более информативного представления исключения при его выводе.
  • В блоке try...except мы возбуждаем исключение CustomError с передачей нескольких параметров.
  • В блоке except мы можем получить доступ к этим параметрам через атрибуты экземпляра исключения (e.message, e.error_code, e.details).

Этот подход позволяет вам передавать структурированную информацию об ошибке, что облегчает ее анализ и обработку.

0