РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
632 of 711 menu

Событие init_failure

Событие init_failure из секции event срабатывает, когда в процессе создания экземпляра (инициализации) возникает исключение. Обработчик события получает целевой объект, аргументы и словарь контекста, а также информацию об ошибке. Это позволяет логировать сбои, выполнять дополнительные проверки или изменять поведение приложения без изменения исходного кода класса.

Синтаксис

from sqlalchemy import event @event.listens_for(TargetClass, 'init_failure') def handler(target, args, kwargs): # logic here pass

Пример

Рассмотрим простой класс, который при инициализации проверяет переданное значение и выбрасывает исключение, если оно некорректно. Подключим обработчик события init_failure для логирования ошибки:

from sqlalchemy import event class Article: def __init__(self, title): if not title: raise ValueError('Title cannot be empty') self.title = title @event.listens_for(Article, 'init_failure') def on_init_failure(target, args, kwargs): print(f'Init failed for {target.__class__.__name__} with args={args}') try: Article('') except ValueError: pass

Результат выполнения кода:

"Init failed for Article with args=('',)"

Пример

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

from sqlalchemy import event from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] def __init__(self, title): if len(title) < 3: raise ValueError('Title too short') self.title = title @event.listens_for(Article, 'init_failure') def log_failure(target, args, kwargs): print(f'Failed to init Article with args={args}') try: Article('ab') except ValueError: pass

Результат выполнения кода:

"Failed to init Article with args=('ab',)"

Смотрите также

  • событие init,
    которое срабатывает при успешной инициализации объекта
  • событие before_configured,
    которое вызывается перед настройкой мапперов
  • событие after_configured,
    которое вызывается после настройки мапперов
  • функцию listens_for,
    которая регистрирует обработчик события
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить