python`with`语句用法的其他内置或实际示例?

时间:2013-10-20 23:39:50

标签: python python-2.7 with-statement conceptual contextmanager

有没有人在python的__enter____exit__用例的文件对象实现之外有一个真实世界的例子?最好是你自己的,因为我想要实现的是一个更好的方法来概念化它将被使用的情况。

我已阅读this

而且,here's a link to the python documentation.

3 个答案:

答案 0 :(得分:7)

许多用途。就在我们的标准库中:

每当您想要检测代码块何时开始和/或结束时,您都希望使用上下文管理器。在您使用try:finally:套件来保证清理之前,请使用上下文管理器。

答案 1 :(得分:3)

Python Wiki上有几个例子。

规范的答案是锁定:

with (acquire some mutex):
    # do stuff with mutex

Here's a Stack Overflow question and answer involving locks and the with statement.

答案 2 :(得分:2)

我发现拥有contextmanager版本的os.chdir()非常有用:退出时chdir()返回原始目录。

这允许您模拟一个通用(Bourne)shell脚本模式:

(
cd <some dir>
<do stuff>
)

即。您在子shell(<some dir> ()内更改为新的目录),以便确保返回原始目录,即使<do stuff>导致错误

比较Python中的上下文管理器和vanilla版本。香草:

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

使用上下文管理器:

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

后者更好!