import sys def exception_wrapper(functor, exc_list=NotSet, return_on_error=None): def wrapper(*rest, **kw_args): try: return functor(*rest, **kw_args) except exc_list: etype, evalue, etrace = sys.exc_info() print "WARNING: Intercepted exception %s: %s" % (etype, evalue) return return_on_error # end wrapper return wrapper # end exception_wrapper class A(object): def foo(self, n): if n % 2 == 0: raise ValueError("n=%d is even" % n) elif n == 5: raise AttributeError("n=%d is five" % n) print "n=%s is ok" % n foo = exception_wrapper(foo, ValueError, None) def bar(self, n): self.foo(n) bar = exception_wrapper(bar, (ValueError, AttributeError), None) # end A