Python高阶 ---上下文管理器
上下文管理器概念:
1)上下文管理器是一个Python对象,为操作提供了额外的上下文信息。这种额外的信息,在使用with语句初始化上下文,以及完成with块中 的所有代码时,采用可调用的形式。
2)要实现一个上下文管理器,就得在类里实现__enter__ 和 __exit__ 这两个方法,这个类的实例就是一个上下文管理器。
3)上下文表达式必须要返回一个上下文管理器。可以是__enter__ 方法的返回值。
基本语法:
with EXPR as VAR:
BLOCK
注:这个BLOCK 里的函数可以是上下文管理器中自定义的函数,也可以是外部的自定义函数,这样就实现了对外部数据的管理;
作用:1、可以以更加优雅的方式,操作(创建、获取、释放)资源,如文件操作、数据库连接;
2、可以以一种更加优雅的方式,处理异常;
-- object.__enter__(self)
输入与此对象相关的运行时上下文,如果存在的话,with语句将绑定该方法的返回值到该语句的as字句中指定的目标。
-- object.__exit__(self, exc_type, exc_val, exc_tb)
exc_type:异常类型
exc_val:异常值
exc_tb:异常回溯追踪
__exit__ 方法不会自动执行,需要赋值以上的参数,用来回收资源和处理异常;
即退出与此对象相关的运行时上下文,参数描述导致上下文退出的异常,如果该上下文退出时没有异常,三个参数都将为None。如果提供了一个异常,并且该方法希望抑制该异常(即防止它被传播),它应该返回一个真值。否则,在退出此方法后,异常将被正常处理,注意__exit__()方法不应该重新抛出传递进去的异常;这是调用者的责任。
这个方法只能返回两种值True 或者 False,True表示外部不会抛出异常,False表示外部还会抛出异常。
例子: