高级语法之异常with
语法:
with 表达式1 [as 变量1], 表达式2 [as 变量2], ....:
语句块
with的作用:
使用于对资源进行访问的场合,确保使用过程中不管是否发生异常都会执行必须的’ 清理 ‘操作,并释放资源
如:文件打开后自动关闭,线程中锁的自动获取和释放等。
语法说明:
as子句中的变量用于绑定表达式执行后生成的对象
with语句并不会改变异常的状态
class A:
'''可以用于with语句进行管理'''
def __enter__(self):
print('此方法是在with语句内执行的')
return self # self将被with中的as绑定
def isPrime(self):
return 1
def __exit__(self, exc_type, exc_val, exc_tb):
'''
:param exc_type: 用来绑定错误类型,当没有异常发生时,绑定None
:param exc_val: 绑定错误对象,...
:param exc_tb: 绑定TraceBase对象(追踪)...
:return:
'''
if exc_type is None:
print('已离开with语句,离开时没发生异常')
else:
print('已离开with语句')
print('错误类型是:', exc_type)
print('错误对象是:', exc_val)
print('TraceBase:', exc_tb)
with A() as a:
print('这是with语句内部输出')
int(input('请输入整数:'))
print(a.isPrime())
print('程序正常结束')
此方法是在with语句内执行的
这是with语句内部输出
请输入整数:10
1
已离开with语句,离开时没发生异常
程序正常结束
资源管理器
- 类内有enter和exit实例方法的类创建的对象被称为环境管理器
- 能够用with语句进行管理的对象必须是环境管理器
-
enter方法将进入with语句时被调用,由as变量绑定并返回
-
exit方法将在离开with语句时被自动调用,且可以通过参数来判断离开with语句时是否有异常发生。
本节完