python with

来源:互联网 发布:怎样做网络代理 编辑:程序博客网 时间:2024/06/10 12:55
file = open(filename)data = file.read()file.close()

有两个问题需要注意

  1. 忘记关闭文件句柄
  2. 文件读取出现异常,没有进行任何处理

so,

try:    file = open(filename)except:    print 'error'    exit(-1)try:    data = file.read()except:    passfinally:    file.close()

还有一种写法是:

try:    file = open(filename)    data = file.read()except:    passfinally:    file.close()

个人感觉第一个方法比较好。

采用with的方法:

with open(filename) as file:    data = file.read()

python 处理with的基本思想是,with所求值的对象必须有一个_enter_() 方法 和 _exit__() 方法,紧跟with后面的语句被求值后返回对象的_enter_()方法被调用,这个方法的返回值被赋值给as后面的变量。当with后面的代码块全部执行完之后,将调用_exit()方法。

class sample:    def __enter__(self):        print 'in __enter__'        return 'Foo'    def __exit__(self, type, value, trace):        print 'in __exit__'def get_sample():    return sample()with get_sample() as sample:    print 'simple', sample
class sample:    def __enter__(self):        print 'in enter'        return self    def __exit__(self, exc_type, exc_val, exc_tb):        print 'type', exc_type        print 'val', exc_val        print 'tb', exc_tb    def do_something(self):        bar = 1         return bar + 10with sample() as f:    print f.do_something()

resuklt:

in enter11type Noneval Nonetb NoneProcess finished with exit code 0
0 0
原创粉丝点击