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

Метод send_robust

Метод send_robust применяется к объекту сигнала NamedSignal и отправляет его всем подключённым получателям. В отличие от метода send, он не прерывает выполнение при возникновении исключения внутри получателя, а перехватывает его и продолжает оповещение остальных подписчиков. Первым параметром передаётся объект-отправитель, обычно это current_app или app. Далее можно передать произвольные именованные аргументы, которые будут доступны получателям.

Синтаксис

signal.send_robust(sender, **kwargs)

Пример

Давайте создадим сигнал и подключим к нему два получателя, один из которых выбрасывает исключение:

from flask import Flask from flask.signals import Namespace app = Flask(__name__) namespace = Namespace() my_signal = namespace.signal('my-signal') def receiver_one(sender, **kwargs): print('receiver one') def receiver_two(sender, **kwargs): raise ValueError('error in receiver two') def receiver_three(sender, **kwargs): print('receiver three') my_signal.connect(receiver_one) my_signal.connect(receiver_two) my_signal.connect(receiver_three) res = my_signal.send_robust(app) print(res)

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

receiver one receiver three [(<function receiver_one at 0x...>, None), (<function receiver_two at 0x...>, ValueError('error in receiver two')), (<function receiver_three at 0x...>, None)]

Метод возвращает список кортежей. Первый элемент кортежа - функция-получатель, второй - либо None, если исключения не было, либо объект исключения.

Пример

Давайте передадим дополнительные данные получателям через именованные аргументы:

from flask import Flask from flask.signals import Namespace app = Flask(__name__) namespace = Namespace() my_signal = namespace.signal('my-signal') def receiver(sender, user, action, **kwargs): print(f'{user} {action}') my_signal.connect(receiver) res = my_signal.send_robust(app, user='abcde', action='login') print(res)

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

abcde login [(<function receiver at 0x...>, None)]

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

  • класс NamedSignal,
    который представляет именованный сигнал
  • метод send,
    который отправляет сигнал без перехвата исключений
  • метод connect,
    который подключает получателя к сигналу
  • метод receivers_for,
    который возвращает получателей для отправителя
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить