擅长:python、mysql、java
<p>一种方法是定义并使用sentinel对象来表示“call the same<em>修饰的</em>函数正在执行。即,在<code>def try_except</code>前面加上:</p>
<pre><code>same = object()
</code></pre>
<p>在包装器的主体中,在<code>try</code>/<code>except</code>之后:</p>
<pre><code> if on_exception is not None:
if on_exception is same:
return decorator(func)(*args, **kwargs)
else:
return on_exception(*args, **kwargs)
</code></pre>
<p>然后,修饰的函数将是,例如(我假设python3,假设您使用<code>input</code>的方式在python2中无疑是<code>raw_input</code>)…:</p>
<pre><code>@try_except(same, ValueError, "Please enter a valid integer!\n>>> ")
def get_int(prompt=">>> "):
return int(input(prompt))
</code></pre>