Python的`with`语句还有哪些内置或实用的用法示例?

5

除了Python文件对象实现之外,有没有现实世界的例子可以说明__enter____exit__的用法?最好是你自己的例子,因为我想达到的目的是更好地理解它们的使用场景。

我已经阅读了这篇文章

还有,在这里有Python文档的链接。

3个回答

9

有很多用途。仅在标准库中,我们就有:

任何时候,当你想要检测代码块的开始和/或结束时,你需要使用上下文管理器。以前,你会使用try:finally:套件来保证清理工作,现在可以使用上下文管理器代替。请注意保留HTML标签。

4

我发现将 os.chdir() 写成一个contextmanager的形式非常有用:退出时自动返回到原始目录。

这可以让你模仿一个常见的(Bourne)shell脚本模式:

(
cd <some dir>
<do stuff>
)

例如,您可以在子shell中更改到一个新的目录<some dir>(使用 ( )),这样即使<do stuff>导致错误,您也能够返回到原始目录。

比较Python中的上下文管理器和普通版本。 普通版本:

original_dir = os.getcwd()
os.chdir(<some dir>)
try:
    <do stuff>
finally:
    os.chdir(original_dir)

使用上下文管理器:

with os.chdir(<some dir>):
    <do stuff>

后者更好!

我真的很喜欢这个例子的简洁性和详细说明。这是解释概念的非常好的例子。 - jgstew

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接