擅长:python、mysql、java
<p>实际上,您需要每个<code>do_<Step></code>函数在前一个函数的<code>finally</code>块内运行,如下所示:</p>
<pre><code>try:
do_1(line)
except:
# Handle failure
pass
finally:
# Run regardless
try:
do_2(line)
except:
# Handle failure
finally:
# Run regardless
try:
do_3(line)
...
</code></pre>
<p>这将通过<code>finally</code>块将函数链接在一起。请注意,在任何步骤中发生异常时,将在开始下一步之前处理该异常,无论是否生成异常,下一步都保证运行。在</p>
<hr/>
<p>由于您的函数都具有相同的形状(采用相同数量和类型的参数),您可以将此模式抽象为一个函数,如下面的<code>tryChain</code>:</p>
^{pr2}$
<p>注意,在本例中,只有最后一个异常被抛出回调用者;其他异常被隐藏。(您也可以在<code>tryChain</code>内处理异常,在那里插入一个<code>except</code>块;或者,您可以为每个步骤传递一个错误处理程序;或者从异常类型到适当的处理程序的映射,如果它们都不匹配,则重新抛出错误-但此时,您实际上是在重新设计异常处理。)</p>