Сообщение Re: [python] Условный контекстный менеджер от 02.07.2024 17:50
Изменено 02.07.2024 17:52 Ватакуси
Re: [python] Условный контекстный менеджер
Здравствуйте, Буравчик, Вы писали:
Б>Задача: написать контекстный менеджер need_run, который мог бы выполнять или не выполнять код в зависимости от заданного условия.
Б>
Б>Возможно ли в принципе? Возможно ли решение без привязки к конкретной реализации?
Б>Задача: написать контекстный менеджер 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")
Б>