Пример:
class MyCustomError(Exception):
def __init__(self, message, code):
self.message = message
self.code = code
super().__init__(f"Error: {self.message}, Code: {self.code}")
try:
raise MyCustomError("Invalid input", 400)
except MyCustomError as e:
print(e) # Выведет: Error: Invalid input, Code: 400
Объяснение: В __init__
принимаются параметры (message
, code
). Вызываем super().__init__()
и форматируем сообщение, используя параметры конструктора.
Для создания собственного исключения в Python с использованием параметров конструктора для формирования сообщения, необходимо:
Пример кода:
class CustomError(Exception):
def __init__(self, value, message="Произошла ошибка"):
self.value = value
self.message = f"{message}: value = {value}" # Формируем сообщение
def __str__(self):
return self.message
def some_function(x):
if x < 0:
raise CustomError(x, "Недопустимое значение")
return x * 2
try:
result = some_function(-5)
print(result)
except CustomError as e:
print(f"Поймано исключение: {e}")
# Пример без передачи кастомного сообщения:
try:
result = some_function(-1)
print(result)
except CustomError as e:
print(f"Поймано исключение: {e}")
Разъяснение:
Альтернативный вариант (без атрибута `message`):
class CustomError(Exception):
def __init__(self, value, message="Произошла ошибка"):
self.value = value
self.message_template = message
def __str__(self):
return f"{self.message_template}: value = {self.value}"
def some_function(x):
if x < 0:
raise CustomError(x, "Value cannot be negative")
return x * 2
try:
result = some_function(-5)
print(result)
except CustomError as e:
print(f"Error: {e}")
В этом варианте, мы сохраняем шаблон сообщения в `self.message_template` и формируем финальное сообщение в `__str__`.
Почему это важно: