关键字with、上下文管理器context manager

本文详细介绍了Python中的上下文管理器和with关键字,包括其工作原理、应用场景和异常处理机制。上下文管理器主要用于资源的获取与释放,而with关键字则确保资源在使用后得以正确关闭,即使在执行过程中出现异常。
摘要由CSDN通过智能技术生成

参考:link1link2这两篇博文写得很全

下文都是本人一个下午的心血,可见上下文管理context manager不是那么容易理解透的

上下文管理器:

定义(根据本人理解):一个按照上下文管理协议定义的对象,上下文管理协议要求包含两个方法__enter____exit__,一般用类Class来写,或者是contextlib。
the object is an instance of a class defined according to the context manager protocol that consists of enter and exit methods.
应用:资源(比如文件)的获取及释放;异常处理。
场景(大家最关心的):调用别人写的上下文管理器;为了代码结构紧凑,调用自己写的上下文管理器,而不是用try-except-else-finally

关键字with:

语法格式syntax:

with 表达式 (as 变量):
执行语句
with expression (as variable):
	with_body

圆括号表示,这一部分是可选的,取决于表达式是否有返回值要传给变量。
工作原理:
(1)执行expression语句,获取上下文管理器(Context Manager)
(2)调用上下文管理器中的__enter__方法,该方法执行一些预处理工作。
(3)这里的as variable可以省略,如果不省略,则将__enter__方法的返回值赋值给variable。
(4)执行语句块with_body,这里的variable可以当做普通变量使用。
(5)最后调用上下文管理器中的的__exit__方法。
(6)__exit__方法有三个参数:type, value, traceback。如果语句块with_body发生异常并退出,那么这三个参数会得到具体的值,否则全为None
(7)__exit__方法的返回值可以为True或者False。如果为True,那么表示异常被忽视,相当于进行了try-except操作;如果为False

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值