有没有一种方法可以有条件地使用 with 语句开始一段代码?
就像是:
if needs_with():
with get_stuff() as gs:
# do nearly the same large block of stuff,
# involving gs or not, depending on needs_with()
澄清一下,一种情况是将一个块封装在 with 语句中,而另一种可能性是相同的块,但没有封装(即,就好像它没有缩进一样)
最初的实验当然会给出缩进错误..
原文由 norman 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你想避免重复代码并且使用 3.7 之前的 Python 版本(引入
contextlib.nullcontext
时)甚至 3.3(引入contextlib.ExitStack
时),你可以做类似的事情:或者:
然后将其用作:
您也可以根据
get_stuff()
返回不同的东西needs_with()
。(请参阅 Mike 的回答 或 Daniel 的回答,了解您可以在以后的版本中做什么。)