class MyCustomError(Exception):
    def __init__(self, message, error_code):
        super().__init__(message)
        self.error_code = error_code
try:
    # ... код, который может вызвать исключение ...
    raise MyCustomError("Произошла ошибка", 500)
except MyCustomError as e:
    print(f"Сообщение об ошибке: {e}")
    print(f"Код ошибки: {e.error_code}")
  error_code является дополнительной информацией об ошибке.
  class CustomError(Exception):
     def __init__(self, message, error_code, filename=None):
        super().__init__(message)  # Вызываем конструктор родительского класса
        self.error_code = error_code
        self.filename = filename
     def __str__(self):
        base_message = super().__str__()
        additional_info = f" (Error Code: {self.error_code}"
        if self.filename:
           additional_info += f", Filename: {self.filename})" 
        else:
           additional_info += ")"
        return base_message + additional_info
  try:
     raise CustomError("Something went wrong", 123, filename="data.txt")
  except CustomError as e:
     print(e)  # Выведет: Something went wrong (Error Code: 123, Filename: data.txt)
     print(f"Error code: {e.error_code}") # Выведет: Error code: 123
     if e.filename:
        print(f"Filename: {e.filename}") # Выведет: Filename: data.txt
  
  
  
  Объяснение: