Python的with上下文要点

python的的with上下文其实可以自己实现,只要该对象实现了__enter__和__exit__方法,就实现了一个with上下文,可以用with来处理该对象,如下:

class MyResource:
    def __enter__(self):
        return self
    
    def __exit__(self, exc_type, exc_value, tb):
        if tb:
            print('proccess exception')
        else:
            print('no exception')
        print('close resource connection')
        
    def query(self):
        print('query data')
        

with MyResource() as resource:
    resource.query()

注意:
1、任何实现了__enter__和__exit__魔法方法的对象都能用with处理
2、with实例化对象后用as赋给一个变量,变量为__enter__所返回的值,上面代码中__enter__返回的是实例对象。
3、调用的顺序是__enter__,然后with里的逻辑,最后是__exit__方法。
4、__exit__ 方法包含4个参数,分别是(self, exc_type, exc_value, tb),第一个是实例对象,后面三个分别为异常类型、异常值和异常堆栈信息。这里主要是为了捕获异常,只要是逻辑处理中危险异常,都会在这里捕获,并退出。
5、__exit__ 方法是有返回的,如果return值是Ture的话,就代表捕获了异常,不会抛出;如果返回值为空或者返回False,就代表异常会继续抛出。

Last modification:November 25th, 2019 at 10:49 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment