Exception
или его подклассов. В конструкторе __init__
класса можно добавить новые атрибуты.
class CustomException(Exception):
def __init__(self, message, error_code):
super().__init__(message) # Вызываем конструктор базового класса
self.error_code = error_code
self.message = message #Сохраняем сообщение в атрибут
try:
# ... код, который может вызвать исключение ...
raise CustomException("Произошла ошибка", 500)
except CustomException as e:
print(f"Ошибка: {e.message}, Код ошибки: {e.error_code}")
Чтобы создать исключение с дополнительными атрибутами, такими как код ошибки и сообщение, вам нужно создать новый класс исключения, который наследуется от базового класса Exception
(или от другого подходящего встроенного класса исключений, если есть более специфичный подходящий вариант). Внутри этого класса вы определяете собственные атрибуты в методе __init__
, принимая нужные параметры для их инициализации.
Вот пример:
class CustomException(Exception):
def __init__(self, message, error_code):
super().__init__(message) # Вызов __init__ родительского класса для установки сообщения
self.error_code = error_code
self.message = message # Дублируем для удобства доступа. Можно и убрать, если не нужно отдельно
def __str__(self): #необязательно, но полезно
return f"CustomException: Error Code: {self.error_code}, Message: {self.message}"
# Пример использования
try:
# Что-то, что может вызвать исключение
raise CustomException("Произошла ошибка при обработке данных", 500)
except CustomException as e:
print(f"Поймано исключение: {e}")
print(f"Код ошибки: {e.error_code}")
print(f"Сообщение об ошибке: {e.message}")
except Exception as e:
print(f"Поймано общее исключение: {e}")
Разберем код:
class CustomException(Exception):
: Создаем новый класс CustomException
, который наследуется от Exception
. Это делает его исключением.def __init__(self, message, error_code):
: Конструктор класса. Он принимает message
(текстовое сообщение об ошибке) и error_code
(числовой код ошибки) в качестве аргументов.super().__init__(message):
: Вызывает конструктор родительского класса (Exception
) и передает ему сообщение. Это важно, чтобы базовый класс мог правильно инициализировать исключение с сообщением.self.error_code = error_code
: Сохраняет переданный error_code
в качестве атрибута экземпляра класса CustomException
.self.message = message
: Сохраняет переданное сообщение. Это позволяет получить доступ к сообщению через e.message
. Хотя сообщение уже хранится в базовом классе Exception, его удобно хранить отдельно для прямого доступа. Если вам нужно только базовое сообщение исключения, можно эту строку убрать.def __str__(self):
(Необязательно, но рекомендуется): Переопределяет метод __str__
, чтобы предоставить более информативное строковое представление исключения. Это полезно при отладке и логировании. Если этот метод не переопределить, то при выводе исключения в консоль будет отображаться только сообщение, переданное в конструктор базового класса Exception
.
Пример использования:
try...except
: Используем блок try...except
для перехвата исключения.raise CustomException("...", 500)
: Поднимаем исключение CustomException
с заданным сообщением и кодом ошибки.except CustomException as e:
: Перехватываем конкретно исключение CustomException
. Переменная e
содержит экземпляр исключения.print(e.error_code)
и print(e.message)
: Получаем доступ к добавленным атрибутам error_code
и message
через экземпляр исключения e
.Важные моменты:
Exception
: Убедитесь, что ваш класс исключения наследуется от Exception
(или другого подходящего класса исключения).super().__init__(message)
: Не забудьте вызвать super().__init__(message)
в конструкторе вашего класса. Это инициализирует базовый класс Exception
с сообщением об ошибке.Этот подход позволяет создавать исключения с дополнительной информацией, что значительно упрощает отладку и обработку ошибок в вашем коде.