骄傲的赛亚人

with上下文管理器

with:是用来启动对象的上下文管理器的,在调用with方法时,系统自动执行下文管理协议,自动调用__enter__和__exit__方法

上下文管理器协议:

__enter__:进入上下文管理器执行的方法

__exit__: 退出上下文管理器执行的方法

代码执行顺序:

在34行调用上下文管理协议时候,首先执行__enter__方法里面的代码,并将返回结果赋值给f,f就是执行__enter__方法返回的值,with中的代码执行完毕之后

最后执行退出方法__exit__方法

 

手动实现上下文管理器

 

 

 

 

 输出:

exc_type的值: <class 'NameError'>

exc_val的值: name 'name' is not defined

exc_tb的值: <traceback object at 0x0000021822BA1BC8>

 

posted on 2022-03-04 22:13  骄傲的赛亚人  阅读(61)  评论(0编辑  收藏  举报

导航