之前有个博客 understanding python with statement,讲到当__enter__() 和 __exit()__ 像进出的门检,并且,__exit()__可以处理和吸收所有异常,并且可以定制哪些异常抛出,哪些异常吞下,如果要吞下这个异常,只需要判断该种异常,返回true。编写如下的代码:def __exit__(self, type, value, traceback):
return isinstance(value, TypeError)
就会吞下所有typeerror的异常。
timer的例子:import time
class Timer(object):
def __init__(self, verbose=False):
self.verbose = verbose
def __enter__(self):
self.start = time.time()
return self
def __exit__(self, *args):
self.end = time.time()
self.secs = self.end - self.start
self.msecs = self.secs * 1000 # millisecs
if self.verbose:
print 'elapsed time: %f ms' % self.msecs
使用:from timer import Timer
from redis import Redis
rdb = Redis()
with Timer() as t:
rdb.lpush("foo", "bar")
print "=> elasped lpush: %s s" % t.secs
with Timer as t:
rdb.lpop("foo")
print "=> elasped lpop: %s s" % t.secs