如何在"with"块中有条件地执行代码?

ola*_*ndo 0 python with-statement

我想这有点滥用这个功能,但我仍然很好奇它是否可以完成 - 我想做的事情如下:

with conditional(a):
    print 1
Run Code Online (Sandbox Code Playgroud)

因此print 1只有在== True时才执行该部分.这可能吗?

编辑:像下面的人一样,这是一种可怕的风格.这只是一个谜语\问题.不要在家里试试,不要因为胆小的人等.

aby*_*byx 9

没有真正的理由这样做,因为条件已经使用if语句提供:

if a == True:
    print 1
Run Code Online (Sandbox Code Playgroud)

但是,如果你只是在寻求乐趣,答案是你不能真的.要阻止with内容执行,conditional需要以某种方式停止执行,在其__enter__方法中.但它能做到这一点的唯一方法是引发一个异常,这意味着没有其他代码会运行,除非你with用一个try语句包装来处理案例a != True

编辑:看到我在评论和投票中被起诉使用OP的条件(a == True)我考虑将其更改为if a,这当然是Python中用于测试条件的习语.但是,我们不知道 OP的想法什么,以及他是否真的想a成为一个布尔值,并且如果a = [1](通过if a)我不想要执行块我决定保留原样.

  • @ S.Lott:没有理由拒绝回答,因为它完全符合问题的要求.这个问题是"只有'a == True`". (4认同)
  • `a is True`**丑陋且语义不同于`a == True` :) (3认同)
  • 天哪,我只是复制了他所说的应该是的条件. (3认同)
  • -1:`if a == True`.请说'如果是'. (2认同)