我想知道用python编写try
..except
语句的最优雅的方式是什么。假设我有这个代码:
with open(sys.argv[1]) as f:
for line in f:
try:
do_1(line)
except:
pass
try:
do_2(line)
except:
pass
try:
do_3(line)
except:
pass
...
...
写这个最好的方法是什么?我的行动是循序渐进的。但是,如果do_1
失败,我仍然想执行do_2
。如果它们都在一个try
..except
块中,那么如果do_1
失败,我将永远无法到达do_2
。这是正确的方法吗,还是可以为所有d0_i
操作使用一个except
?在
我将列出您的
try/except
语句的通用代码。比如:实际上,您需要每个
do_<Step>
函数在前一个函数的finally
块内运行,如下所示:这将通过
finally
块将函数链接在一起。请注意,在任何步骤中发生异常时,将在开始下一步之前处理该异常,无论是否生成异常,下一步都保证运行。在由于您的函数都具有相同的形状(采用相同数量和类型的参数),您可以将此模式抽象为一个函数,如下面的
^{pr2}$tryChain
:注意,在本例中,只有最后一个异常被抛出回调用者;其他异常被隐藏。(您也可以在
tryChain
内处理异常,在那里插入一个except
块;或者,您可以为每个步骤传递一个错误处理程序;或者从异常类型到适当的处理程序的映射,如果它们都不匹配,则重新抛出错误-但此时,您实际上是在重新设计异常处理。)把它写成一个循环就足够简单了:
相关问题 更多 >
编程相关推荐