擅长:python、mysql、java
<p>异常是中断链式操作的好方法:</p>
<pre><code>class CalcError(Exception):
pass
class Calc:
def __init__(self, n: int = 0):
self.n = n
def add(self, n: int) -> 'Calc':
self.n += n
return self
def might_raise(self) -> 'Calc':
raise CalcError
def __str__(self) -> str:
return str(self.n)
w = Calc()
try:
w.add(5).might_raise().add(5)
addedTwice = True
except CalcError:
addedTwice = False
print(w) # prints 5
print(addedTwice) # prints False
</code></pre>
<p>你也可以这样做:</p>
<pre><code>w = Calc()
num_added = 0
try:
w.add(5)
num_added += 1
w.add(5)
num_added += 1
w.might_raise()
w.add(5)
num_added += 1
w.add(5)
num_added += 1
except CalcError:
print(f"Stopped after {num_added} additions")
</code></pre>
<p>如果试图使用<code>return</code>而不是<code>raise</code>来执行此操作,则需要检查链的每个步骤的状态,以便可以切换到其他代码分支(可能通过<code>if</code>块)。引发异常具有非常有用的特性,即无论您在何处,都会立即中断执行,并直接将您带到最近的匹配<code>except</code></p>