更新时间:2021-03-10 来源:黑马程序员 浏览量:
with语句之所以能够自动关闭资源,是因为它使用了一种名为上下文管理的技术管理资源。接下来,对上下文管理器的知识进行介绍。
1.上下文管理协议(Context Manager Protocol)
上下文管理协议包括了__enter__()和__exit__()方法,支持该协议的对象均需要实现了这两个方法。__enter__()和__exit__()方法的含义与用途如下所示:
__enter__(self):进入上下文管理器时调用此方法,它的返回值被放入with-as语句as说明符指定的变量中。
__exit__(self, type, value, traceback):离开上下文管理器时调用此方法。在__exit__()方法中,参数type、value、traceback的含义分别为:异常的类型、异常值、异常回溯追踪。如果__exit__()方法内部引发异常,该异常会覆盖掉其执行体中引发的异常。处理异常时不需要重新抛出异常,只需要返回False。
2.上下文管理器(Context Manager)
支持上下文管理协议的对象就是上下文管理器,这种对象实现了__enter__()和__exit__()方法。通过with语句即可调用上下文管理器,它负责建立运行时的上下文。
3.上下文表达式(Context Expression)
with语句中关键字with之后的表达式返回一个支持上下文管理协议的协议的对象,也就是返回一个上下文管理器。
4.运行时上下文
由上下文管理器创建,通过上下文管理器的__enter__()和__exit__()方法实现。__enter__()方法在语句体执行之前执行,__exit__()方法在语句体执行之后执行。
猜你喜欢
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19