Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Python: Python, custom exception, inheritance, Exception, raise

Как реализовать кастомные exception?

Вопрос проверяет умение создавать пользовательские исключения в Python, что необходимо для улучшения читаемости кода и точной обработки ошибок.

Короткий ответ

Кастомные исключения создаются путём наследования от базового класса Exception или его подклассов. Это позволяет определить специфичные для вашего приложения типы ошибок. Например, можно создать класс ValidationError для ошибок валидации данных. Использование таких исключений делает код более понятным и облегчает отладку, так как ошибки становятся более информативными.

Длинный ответ

Кастомные исключения (user-defined exceptions) в Python — это классы, которые наследуются от встроенного класса Exception или его подклассов (например, ValueError, RuntimeError). Их основная цель — предоставить более семантически точные и информативные типы ошибок для конкретной предметной области вашего приложения, что улучшает читаемость кода и упрощает обработку исключений.

Зачем нужны кастомные исключения?

  • Ясность кода: Имя исключения прямо указывает на тип проблемы (например, InsufficientFundsError вместо общего ValueError).
  • Точная обработка: Вы можете перехватывать конкретные типы исключений в блоках try/except, не полагаясь на проверку строковых сообщений.
  • Расширяемость: В кастомный класс можно добавить дополнительные атрибуты (например, код ошибки, дополнительные данные) и логику инициализации.

Как создать кастомное исключение

Минимальная реализация — просто объявить класс, наследующийся от Exception. Обычно тело класса остаётся пустым, но вы можете переопределить метод __init__ для передачи дополнительной информации.

# Базовый пример
class MyCustomError(Exception):
    """Базовое кастомное исключение."""
    pass

# Исключение с дополнительными атрибутами
class ValidationError(Exception):
    def __init__(self, message, field_name):
        super().__init__(message)
        self.field_name = field_name

# Использование
def validate_age(age):
    if age < 0:
        raise ValidationError("Возраст не может быть отрицательным", "age")
    if age > 150:
        raise ValidationError("Возраст слишком велик", "age")

try:
    validate_age(-5)
except ValidationError as e:
    print(f"Ошибка в поле {e.field_name}: {e}")

Практическое применение

Кастомные исключения широко используются в веб-фреймворках (например, Django, FastAPI), библиотеках и бизнес-логике приложений. Они помогают отделить ошибки уровня приложения от системных ошибок Python.

# Пример в контексте банковского приложения
class InsufficientFundsError(Exception):
    """Исключение при недостатке средств на счете."""
    def __init__(self, balance, amount):
        self.balance = balance
        self.amount = amount
        message = f"Недостаточно средств. Баланс: {balance}, запрошено: {amount}"
        super().__init__(message)

class BankAccount:
    def __init__(self, balance):
        self.balance = balance
    
    def withdraw(self, amount):
        if amount > self.balance:
            raise InsufficientFundsError(self.balance, amount)
        self.balance -= amount
        return amount

# Клиентский код
account = BankAccount(100)
try:
    account.withdraw(200)
except InsufficientFundsError as e:
    print(e)  # Выведет информативное сообщение
    # Можно также получить доступ к e.balance и e.amount

Вывод: Кастомные исключения стоит применять, когда вам нужно чётко разделить типы ошибок в вашем приложении, добавить контекстную информацию к ошибке или создать иерархию исключений для сложной бизнес-логики. Они делают код более поддерживаемым и понятным для других разработчиков.

Уровень

  • Рейтинг:

    3

  • Сложность:

    3

Навыки

  • Python

    Python

Ключевые слова

#Python

#custom exception

#inheritance

#Exception

#raise

Подпишись на Java Developer в телеграм