Python中with后面的as f是什么意思?

这篇文章主要介绍了python with语句的原理与用法,结合实例形式详细分析了python with语句基本概念、原理、用法及操作注意事项,需要的朋友可以参考下

本文实例讲述了python with语句的原理与用法。分享给大家供大家参考,具体如下:


之前看到一篇博客说博主python面试时遇到面试官提问with的原理,而那位博主的博文没有提及with原理,故有此文。

关于with语句,官方文档中是这样描述的:

with语句用于使用由上下文管理器定义的方法来封装块的执行(请参见使用语句上下文管理器一节)。 这允许通用的try…except…finally使用模式被封装以便于重用【这句话大概意思就是“with语句”类似于try…except…finally封装之后的的情况】。

带有一个“项目”的with语句的执行过程如下:
1.上下文表达式(在with_item中给出的表达式)被评估以获得上下文管理器。【会区分类型来处理,如文件,进程等都可以使用with语句】 2.上下文管理器的__exit __()被加载供以后使用。【负责上下文的退出】
3.上下文管理器的__enter __()方法被调用。【负责上下文的进入】
4.如果在with语句中包含目标,则将__enter __()的返回值分配给它。【如果with后面跟着as 对象(如with open() as f),那么此对象获得with上下文对象的__enter__()的返回值,(附:应该是类似操作数据库时的连接对象和游标的区别)】

with语句保证,如果__enter __()方法返回时没有错误,那么将始终调用__exit __()。 因此,如果在分配给目标列表期间发生错误,它将被视为与套件内发生的错误相同。 请参阅下面的第6步。


5.该套件已执行。【意思就是语句体中的过程执行完毕,执行完毕就到第六步--调用__exit__()来退出】 6.上下文管理器的__exit __()方法被调用。 如果异常导致套件退出,则其类型,值和回溯作为参数传递给__exit __()。 否则,将提供三个无参数。

如果套件由于异常而退出,并且__exit __()方法的返回值为false,则会重新对异常进行重新评估。 如果返回值为true,则异常被抑制,并继续执行with语句后面的语句。

如果套件由于除了异常之外的任何原因而退出,则__exit __()的返回值将被忽略,并且执行将在正常位置继续进行。

responsibility.”,大概意思就是exit()不会处理异常,会重新抛出异常抛出给外面,由调用者处理,因为这是调用者的责任)

如果返回 True,则忽略异常,不再对异常进行处理【(在exit内部处理完异常后,可以让”__exit__()”方法返回True,此时该异常就会不会再被抛出,with会认为它的执行体没有发生异常)】

(with会识别返回值,根据返回值来处理,如果是False,那么with会将执行体中的异常抛出,如果是True,那么with会认为没有发生异常(忽略异常),而继续执行外面的语句,但由于内部调用的了__exit__(),所以在异常之后的语句是不会运行的

附上一个文档中提供的一个关于with中使用锁的例子:

1.执行体中发生异常:

 else: #异常不为空时执行,这一步,如果with语句体中发生异常,那么也会执行
 #测试1:执行体中发生异常
 

测试2:当else中强制返回为True时:

 else: #异常不为空时执行,这一步,如果with语句体中发生异常,那么也会执行
 #即,如果exc_type是true,那么会继续执行,实际上,也可以在这里处理一下异常再返回true
 

1.返回True之后,with会忽略异常,继续执行,所以这里“main continue”能执行

2.即使忽略异常,在with体中异常之后的语句依旧不会执行

附:理论上可以在返回True之前处理一下异常

PS:如果大家想要了解得更详细,可以自己尝试去读一下官方文档。

附上关于with语句的详细介绍官方文档:

更多关于Python相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》

希望本文所述对大家Python程序设计有所帮助。

}

我要回帖

更多关于 python中的with as 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信