__enter__
有没有人在python的文件对象实现和用例之外有一个真实的__exit__
例子?最好是你自己的,因为我想要实现的是一种更好的方式来概念化使用它的情况。
我已经读过这个。
__enter__
有没有人在python的文件对象实现和用例之外有一个真实的__exit__
例子?最好是你自己的,因为我想要实现的是一种更好的方式来概念化使用它的情况。
我已经读过这个。
有很多用途。就在标准库中,我们有:
sqlite3
; 使用连接作为上下文管理器转换为提交或中止事务。
unittest
; 用作上下文管理器assertRaises
可以让您断言引发了异常,然后测试异常的各个方面。
decimal
; localcontext
管理十进制数精度、舍入和其他方面。
threading
锁、信号量和条件等对象也是上下文管理器;让您获得一组语句的锁定等。
该warnings
模块为您提供了一个上下文管理器来临时捕获警告。
Python 自己的test.test_support
模块使用多个上下文管理器来检查特定警告、捕获stdout
、忽略特定异常和临时设置环境变量。
每当您想检测代码块何时开始和/或结束时,您都想使用上下文管理器。在您使用try:
套件finally:
来保证清理之前,请改用上下文管理器。
我发现拥有一个: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>
后者好看多了!