5

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

我已经读过这个

而且,这里是 python 文档的链接。

4

3 回答 3

9

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

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

于 2013-10-20T23:59:04.270 回答
4

我发现拥有一个:contextmanager版本很有用os.chdir(),退出时它会chdir()返回到原始目录。

这允许您模拟常见的(Bourne)shell 脚本模式:

(
cd <some dir>
<do stuff>
)

即,您更改为<some dir>子shell (the ( )) 内的新目录,这样您就可以确保返回到您的原始目录,即使这<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>

后者好看多了!

于 2014-02-19T04:37:57.853 回答
3

Python Wiki上有一些示例。

规范的答案是锁:

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

这是一个涉及锁和with语句的堆栈溢出问题和答案。

于 2013-10-20T23:45:01.723 回答