关于使用with来做异常处理(上下文管理)

浏览: 976

3.2.上下文管理(with语句)
   如果你使用try,except,finally代码仅仅是为了保证共享资源(如文件,数据)的唯一分配,并在任务结束后释放它,那么你就有福了!这个with语句可以让你从try,except,finally中解放出来!语法如下:

with context_expr [as var]:

    with_suite

是不是不明白?很正常,举个例子来!

>>> with open('/root/test.py') as f:

...     for line in f:

...         print line

上面这几行代码干了什么?
    (1)打开文件/root/test.py
    (2)将文件对象赋值给  f
    (3)将文件所有行输出
     (4)无论代码中是否出现异常,Python都会为我们关闭这个文件,我们不需要关心这些细节。
    这下,是不是明白了,使用with语句来使用这些共享资源,我们不用担心会因为某种原因而没有释放他。但并不是所有的对象都可以使用with语句,只有支持上下文管理协议(context management protocol)的对象才可以,那哪些对象支持该协议呢?如下表:
file

decimal.Context
thread.LockType
threading.Lock
threading.RLock
threading.Condition
threading.Semaphore
threading.BoundedSemaphore

    至于什么是上下文管理协议,如果你不只关心怎么用with,以及哪些对象可以使用with,那么我们就不比太关心这个问题:)


推荐 0
本文由 不偏离主轨 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册