如何在“with”块中有条件执行代码?

1 投票
5 回答
1734 浏览
提问于 2025-04-15 16:27

我想这可能有点不太符合常规用法,但我还是很好奇这是否能实现——

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的判断),他是否不希望代码块执行。因此我决定保持原样。

撰写回答