Информация об изменениях

Сообщение Re: [python] Условный контекстный менеджер от 02.07.2024 17:50

Изменено 02.07.2024 17:52 Ватакуси

Re: [python] Условный контекстный менеджер
Здравствуйте, Буравчик, Вы писали:

Б>Задача: написать контекстный менеджер need_run, который мог бы выполнять или не выполнять код в зависимости от заданного условия.


Б>
Б># код должен вывести только "must be printed"

Б>with need_run(True):
Б>  print('must be printed')

Б>with need_run(False):
Б>  print('must not be printed')
Б>


Б>Возможно ли в принципе? Возможно ли решение без привязки к конкретной реализации?
Re: [python] Условный контекстный менеджер
Здравствуйте, Буравчик, Вы писали:

Да, это можно. Пришлось вспомнить как это работает-)))

Б>
@contextmanager
def needRun():
    try:
        yield
    except RuntimeError as e:
        if e.args[0] != "generator didn't yield":
            raise  # Raising everything else


@contextmanager
def contextOnCondition(flag: bool=True):
    if flag:
        yield True


if __name__ == "__main__":
    flag = True
    with needRun(), contextOnCondition(flag):
        print("It ran")

    flag = False
    with needRun(), contextOnCondition(flag):
        print("It did not run")
Б>