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
).Этот подход позволяет вам передавать структурированную информацию об ошибке, что облегчает ее анализ и обработку.