with用法
提示
with 语句上下文管理器
上下文管理器是一个对象,它定义了在执行 with 语句时要建立的运行时上下文。
上下文管理器处理进入
和退出
所需运行时上下文以执行代码块。
通常使用 with 语句(在 with 语句 中描述),但是也可以通过直接调用它们的方法来使用。
上下文管理器的典型用法包括保存和恢复各种全局状态
,锁定和解锁资源
,关闭打开的文件
等等。
# with 的实现方式
class MyOpen(object):
def __init__(self, name):
self.name = name
# 进入运行时上下文并返回此对象或关联到该运行时上下文的其他对象。 此方法的返回值会绑定到使用此上下文管理器的 with 语句的 as 子句中的标识符
def __enter__(self):
print('进入了enter,在这里可以做一些初始化工作')
return self # 返回对象给as字句调用
def do_something(self):
print("这是自己的业务逻辑,输入的name:{}".format(self.name))
# 退出关联到此对象的运行时上下文。 各个参数描述了导致上下文退出的异常。 如果上下文是无异常地退出的,三个参数都将为 None。
# 如果提供了异常,并且希望方法屏蔽此异常(即避免其被传播),则应当返回真值。 否则的话,异常将在退出此方法时按正常流程处理。
# 请注意 __exit__() 方法不应该重新引发被传入的异常,异常会导致exit不会被完整的执行,导致代码出现未知错误。
def __exit__(self, exc_type, exc_val, exc_tb):
print('退出了,在这里可以做一些关闭、解锁工作。三个参数分别是异常类、异常值、异常信息追踪。')
print('exc_type: ', exc_type)
print('exc_val: ', exc_val)
print('exc_tb: ', exc_tb)
with MyOpen('test') as m:
m.do_something()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
上次更新: 2023/09/04, 18:39:45