Я хотел бы получить if
, with
или альтернативный оператор, чтобы не вводить блок при условии с побочным эффектом, например. похожее на это:Прерывать блок с переменной и не поднимать?
with sometimes_run_block() as value:
print('this should only sometimes run', value)
с контекстом заявление выглядит следующим образом:
@contextmanager
def sometimes_run_block():
if random.random() > 0.5:
yield 'hello!'
else:
yield
На данный момент я не имею ничего уступая моей @contextmanager
украшенной функции и проверки, если значение не None
. Мне кажется излишним иметь чек экстракта, заставляя его быть три линии и два уровня отступа:
with sometimes_run_block() as value:
if value:
print('this should only sometimes run', value)
Другой альтернатива не использует with
:
value = sometimes_run_block()
if value:
print('this should only sometimes run', value)
текущих рабочие двухлинейную решение заключается в использовании инструкции for
, но это вводит в заблуждение.
for value in sometimes_run_block():
print('this should only sometimes run', value)
Можно ли пропустить обработку контекстного блока (как если бы это было if
заявления), но не поднимая исключение, вводя переменный контекст?
Это не совсем то, что делает оператор 'with' для или для .. Развертывание выполнения выполняется с помощью оператора' if'. –
Если вы хотите получить фантазию, вы можете использовать декоратор, возможно, но для удобочитаемости предпочтительнее условие if. Есть ли какая-то причина, по которой нужно принимать решение в контекст-менеджере? – memoselyk
@memoselyk Не должно быть, просто две линии, делающие это, были бы хороши, как я предполагал. –