python with上下文的浅谈

python中的with一般用于上下文管理,什么是上下文管理,其实平时我们经常会用到,比如连接数据库 查询数据,操作完成后关闭连接。

还比如打开文件写入数据等操作。

具体实例:

class Myresource(object):

    def __enter__(self):
        print("processing")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        if exc_tb:
            print exc_val
            print("process exception")
        else:
            print("no process exception")
        return True

    def query(self):
        print ("query data")

with Myresource() as resource:

  resource.query()

 查看执行情况

processing
query data
no process exception

如果发生异常,比如:

with Myresource() as resource:

  1/0

查看执行情况:

processing
integer division or modulo by zero
process exception

 

__exit__ 最后的return非常的重要,如果不写或者写作return False
那么错误会在内部、外部抛出,这样可以继续在with增加try Expection来抓取错误信息,
如果是return True那么只会在内部抛出
integer division or modulo by zero

 

posted @ 2018-08-03 16:16  北京流浪儿  阅读(201)  评论(0编辑  收藏  举报