__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 позволяет предоставить дополнительную информацию об ошибке, которая может быть полезна для отладки, логирования или обработки исключения. Вот как это можно сделать:
Пример:
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
    # ... обработка исключения ...
  Объяснение:
Использование собственных исключений с параметрами делает код более понятным, упрощает отладку и позволяет более гибко обрабатывать различные типы ошибок.