如何在“with”块中有条件执行代码?
我想这可能有点不太符合常规用法,但我还是很好奇这是否能实现——
with conditional(a):
print 1
我想让print 1
这一部分只有在a等于True的时候才执行。这样做可以吗?
补充说明:像下面的人说的,这种写法真的不好。这个问题只是个谜题,不要在实际编程中尝试,心脏不好的朋友们要谨慎哦。
5 个回答
2
我看到的唯一办法是在conditional
中,如果它的参数是假的话,就抛出一个异常。这样的话,with
里面的代码就不会执行,而且后面的代码也不会执行,当然,直到遇到except
或者finally
的部分。
4
if a is True:
print 1
with
语句是用来提供一个可靠的进入和退出的环境。
10
其实没有必要这样做,因为我们已经有了if
语句来处理条件判断:
if a == True:
print 1
不过,如果你只是出于好奇,答案是你真的不能这样做。要想停止with
中的内容执行,conditional
需要在它的__enter__
方法中以某种方式停止执行。但它能做到的唯一方法就是抛出一个异常,这样就意味着其他代码不会运行,除非你把with
放在一个try
语句里来处理a != True
的情况。
补充:看到我在评论和投票中因为使用了提问者的条件(a == True
)而受到批评,我考虑把它改成if a
,这当然是Python中测试条件的常用写法。但是,我们并不知道提问者的真实想法,他是否真的希望a
是一个布尔值,并且如果a = [1]
(这会通过if a
的判断),他是否不希望代码块执行。因此我决定保持原样。