python上下文管理器及with语句】的更多相关文章

with语句支持在一个叫上下文管理器的对象的控制下执行一系列语句,语法大概如下: with context as var: statements 其中的context必须是个上下文管理器,它实现了两个方法__enter__,__exit__. 1.需求是怎么产生的 在正常的管理各种系统资源(文件.锁定和连接),在涉及到异常时通常是个棘手的问题.异常很可能导致控制流跳过负责释放关键资源的语句. 看一段简单的文件写入代码: filename = 'my_file.txt' f = open(file…
http://blog.csdn.net/pipisorry/article/details/50444736 with语句 with语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ import with_statement 导入后才可以使用),从 2.6 版本开始缺省可用(参考 What's new in Python 2.6? 中 with 语句相关部分介绍).with 语句适用于对资源进行访问的场合,确保不管使用过程…
我们在Python中对于with的语句应该是不陌生的,特别是在文件的输入输出操作中,那在具体的使用过程中,是有什么引伸的含义呢?与之密切相关的上下文管理器(context manager)又是什么呢? 什么是上下文管理器 在任何一种编程语言里,文件的输入输出.数据库的建立连接和断开等操作,都是很常见的资源管理操作.但是资源是有限的,在写程序的时候,我们必须保证这些资源在使用后得到释放,不然就容易造成资源泄漏,轻者系统处理缓慢,重则系统崩溃. 我们看一个例子: for i in range(100…
​什么是上下文管理器 对于像文件操作.连接数据库等资源管理的操作,我们必须在使用完之后进行释放,不然就容易造成资源泄露.为了解决这个问题,Python的解决方式便是上下文管理器.上下文管理器能够帮助你自动分配并且释放资源,其中最典型的应用便是with语句.我们来看一下打开文件的例子. for x in range(10000): f = open('test.txt', 'w') f.write('hello world') 这段代码表示我们打开了1万个文件,但是用完之后没有进行关闭,这是一个典…
Python2.5之后引入了上下文管理器(context manager),算是Python的黑魔法之一,它用于规定某个对象的使用范围.本文是针对于该功能的思考总结. 为什么需要上下文管理器? 首先,需要思索下为什么需要引入上下文管理器. 在正常情况下,管理各种系统资源(如文件).数据库连接时,通常是先打开这些资源,执行完相应的业务逻辑,最后关闭资源. 举两个例子: 使用Python打开一个文件写入内容,之后需要关闭这个文件.如果不正常关闭的话可能会在文件操作时出现异常,因为系统允许你打开的文件…
/*上下文管理器必须有__enter__和__exit__方法*/ class MyResource: def __enter__(self): print('链接资源') return self /*__exit__返回True表示异常只会在__exit__中被捕获,不会继续传递到with语句的之外的except中,如果返回false,则会把异常也传递到except中*/ def __exit__(self,exc_type,exc_value,tb): if tb: print('链接进程异…
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语法形式是with...as... 关闭文件 我们会进行这样的操作:打开文件,读写,关闭文件.程序员经常会忘记关闭文件.上下文管理器可以在不需要文件的时候,自动关闭文件. 下面我们看一…
最终,上下文管理器可能几乎与子程序(subroutine)本身一样重要.目前,我们只了解了上下文管理器的皮毛--Basic 语言有with 语句,而且很多语言都有.但是,在各种语言中 with 语句的作用不同,而且做的都是简单的事,虽然可以避免不断使用点号查找属性,但是不会做事前准备和事后清理.不要觉得名字一样,就意味着作用也一样.with 语句是非常了不起的特性.  --Raymond Hettinger 雄辩的 Python 布道者 先做这个,再做那个:if语句之外的else块 这个语言特性…
在Python中让自己创建的函数.类.对象支持with语句,就实现了上线文管理协议.我们经常使用with open(file, "a+") as f:这样的语句,无需手动调用f.close()关闭文件.这种用法不仅优雅,而且避免遗忘释放资源,十分方便.所以,当操作某些资源时,需要对资源的获取与释放进行自动操作,就可以用上线文管理器.比如:数据库的连接,查询,关闭处理:socket的连接和断开.本篇主要介绍,如何让自己创建的类.对象.函数等支持with语句,详细请看下文. 1 让对象支持…
对于系统资源的操作,如:文件操作.数据库操作等,我们往往打开文件.连接数据库后忘了将其close掉,这时就可能会引发异常,因此我们常用的做法是: # coding:utf-8 f = open("a.txt", "w+") try: f.write("python") except IOError: print("IO ERR") finally: f.close() 这段代码的确能解决实际问题,但是看起来有些繁琐冗余,因此P…