Python上下文管理器

Python上下文管理器

0.上下文管理器

  1. 上下文管理器是Python中的一种协议,它保证了每次代码执行的一致性
  2. 一旦进入上下文管理器,就一定会按照规定的步骤退出
  3. 如果合理的设计了退出上下文管理器的步骤,就能够很好的处理异常。
  4. 上下文管理器被最多用到的场景是资源清理操作。
  5. 实现上下文管理器,只要在类定义时,实现__enter__()方法和__exit__()方法即可
  6. with语句结构就运用到了上下文管理器

1. 异常处理和with语句

异常语句:

try:
	f = open("myPython.txt")
	print(f.read())
# 捕捉错误
except IOError as e:
	print(e)
# 最后都会执行的语句
finally:	
	f.close();
  1. 使用with语句替代try-finally 语句,代码更加的简洁清晰。
  2. 对于需要对资源进行访问的任务,无论在代码运行过程中,是否发生异常,都会执行必要的清理操作,释放资源。
  3. 在with语句完成时,会自动关闭文件。如果再次读取这个文件,就会出现文件关闭的错误提示信息。

2.上下文管理器访问方法

  • 使用with语句访问上下文管理器
    使用with语句访问上下文管理器
  • 实现上下文管理器
class A()
	def __init__(self, val):
		self.a = val
	def __enter__(self):
		print("class A's __enter__ function.")
	# exec_type : 异常的类
	# exec_val  : 实例
	# exev_tb   : 跟踪记录
	# 如果with语句块正常结束,那么这三个参数全部是None。
	def __exit__(self, exec_type, exec_val, exec_tb):
		print("class A's __exit__ function.")

1.在with语句块执行前,首先会执行enter()方法
2. 当with语句块执行结束,无论是否出现异常,都会调用__exit__()方法
3.通常将清除、释放资源的操作写在__exit__()方法中

  • 模拟实现一个文件类
class File():
	def __init__(self, filename, mode):
		self.filename = filename
		self.mode = mode
	def __enter__(self):
		print("执行__enter__()方法")
		self.f = open(self.filename, self.mode)
		return self.f
	def __exit__(self, *args):
		print("执行__exit__()方法")
		self.f.close()

# 以读的方式打开当前目录下的mypython文件,并输出文件内容。
with File('myPython.txt', 'r') as f:
	print(f.read())
  1. 在执行with语句块之前,首先执行了__enter()__方法,然后再执行with语句块,最后执行__exit()__方法。
  2. 采用这种方式读取文件时,即使执行过程中出现了异常,__exit()__方法也会被执行,完成关闭文件的操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值