with
doesn't really replace try
/except
, but, rather, try
/finally
. Still, you can make a context manager do something different in exception cases from non-exception ones:
class Mgr(object):
def __enter__(self): pass
def __exit__(self, ext, exv, trb):
if ext is not None: print "no not possible"
print "OK I caught you"
return True
with Mgr():
name='rubicon'/2 #to raise an exception
The return True
part is where the context manager decides to suppress the exception (as you do by not re-raising it in your except
clause).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…