python基础 自定义with的语句(20)

3 篇文章 0 订阅
1 篇文章 0 订阅
with的作用

使用with后不管with中的代码出现什么错误,都会进行对当前对象进行清理工作。 例如file的file.close()方法,无论with中出现任何错误,都会执行file.close()方法。

with open() as f: 

其次with只有特定场合下才能使用。这个特定场合只的是那些支持了上下文管理器的对象。

什么是上下文管理器

这个管理器就是在对象内实现了两个方法其中为__enter__() 和__exit__()
方法__enter__()方法会在with的代码块执行之前执行,exit()会在代码块执行结束后执行。
方法__exit__()内会自带当前对象的清理方法。

重点:

with方法适用于需要分配和清理资源的情况,比如数据库连接。with方法的实现必须定义 enter()和__exit__()函数。

类和异常的结合
#自己定义一个with方法
class Testwith():
	def __enter__(self):
		print("run")
	def __exit__(self,exc_type,exc_val,exc_tb):
		print("exit")
#类的初始化和类的退出
with Testwith():
	print("Test is runing")

输出的结果:

run
Test is runing
exit

以上的代码中,是没有异常报错的情况,而下面的是有异常报错的情况下,如何输出:

class Testwith():
 def __enter__(self):
  print("run")
 def __exit__(self,exc_type,exc_val,exc_tb):
  if exc_tb is None:
  	print('正常结束')
  else:
  	print('has error %s' %exc_tb)
#类的初始化和类的退出
with Testwith():
 print("Test is runing")
 raise NameError('testNameError')

输出的结果:

run
抛出异常的信息
Test is runing

这就是类和with的结合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值