python的with...as...的实质

python的with...as...的实质

一、总结

一句话总结:

with as语句等价于try finally语句
with expression as variable  
    with-block
等价于
try: 执行 __enter__的内容 执行 with_block. finally: 执行 __exit__内容

1、try..except..finally语句的实质?

try捕获异常,except处理异常,finally必定执行

二、python的with...as...的实质

博客对应课程的视频位置:

with expression as variable  
    with-block

的执行过程是

首先执行expression里面的__enter__函数,
它的返回值会赋给as后面的variable,
想让它返回什么就返回什么,只要你知道怎么处理就可以了,
如果不写as variable,返回值会被忽略。

然后,开始执行with-block中的语句,
不论成功失败(比如发生异常、错误,设置sys.exit()),
在with-block执行完成后,会执行expression中的__exit__函数。


这个和try finally函数有什么关系呢?
其实,这样的过程等价于:

try:
    执行 __enter__的内容  
    执行 with_block.  
finally:  
    执行 __exit__内容  

 
原文地址:https://www.cnblogs.com/Renyi-Fan/p/13270352.html