1 class T():
2 def __enter__(self): #第一步执行此函数
3 print 'this is enter'
4 return 'enterbbb' #返回值赋给 as 后面的变量,既t
5 def __exit__(self, *arg): #第三步执行此函数,arg用来接收异常
6 print 'this is exit'
7 print arg
8 return 'aaa'
9
10 with T() as t:
11 print 'hahah' #第二步执行下面的代码,且有异常不会抛出,而是传给__exist__
2 def __enter__(self): #第一步执行此函数
3 print 'this is enter'
4 return 'enterbbb' #返回值赋给 as 后面的变量,既t
5 def __exit__(self, *arg): #第三步执行此函数,arg用来接收异常
6 print 'this is exit'
7 print arg
8 return 'aaa'
9
10 with T() as t:
11 print 'hahah' #第二步执行下面的代码,且有异常不会抛出,而是传给__exist__
12 print t
13 aa
一个类定义两个方法 __enter__和 __exit__,执行的结果是
this is enter
hahah
enterbbb
this is exit
(<type 'exceptions.NameError'>, NameError("name 'aa' is not defined",), <traceback object at 0x7f2c96aa8830>)
with可以用来简化try finally代码,看起来可以比try finally更清晰。