擅长:python、mysql、java
<p>一个比Dunes的更容易理解的解决方案,尽管没有利用<code>ContextDecorator</code>双语法。在</p>
<pre><code>import contextlib
import functools
def handler():
try:
yield
except:
print 'bar'
my_contextmanager = contextlib.contextmanager(handler)
def my_decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
with my_contextmanager():
func(*args, **kwargs)
return wrapper
with my_contextmanager():
raise Exception('baz')
@my_decorator
def f():
raise Exception('baz')
f()
</code></pre>
<p>给出:</p>
^{pr2}$