擅长:python、mysql、java
<p>下面是一个上下文管理器,它提供了一点快捷方式:</p>
<pre><code>from contextlib import contextmanager
@contextmanager
def catch(*exceptions, **kwargs):
try:
yield kwargs.get("default", None)
except exceptions or Exception:
pass
</code></pre>
<p>用法:</p>
<pre><code>with catch(ZeroDivisionError, default=0) as x:
x = 3 / 0 # error
print x # prints 0, the default
</code></pre>
<p>这里的基本思想是,上下文管理器返回传递给它的任何默认值,然后将其分配给在<code>with</code>语句的<code>as</code>子句中指定的变量。然后,在上下文中,执行一个试图分配给同一个变量的语句。如果它引发异常,则上下文管理器捕获并静默忽略它,但由于未发生分配,因此默认值保持不变。</p>
<p>对于生成单个值的多行计算可能特别有用。</p>