Python中的Try/Except语句与多个except块

6
try:
    raise KeyError()
except KeyError:
    print "Caught KeyError"
    raise Exception()
except Exception:
    print "Caught Exception"

正如预期的那样,第5行引发的 Exception() 在最终的 except Exception 子句中没有被捕获。为了在 except KeyError 块内捕获异常,我必须添加另一个 try...except,并复制最终的 except Exception 逻辑:

try:
    raise KeyError()
except KeyError:
    print "Caught KeyError"
    try:
        raise Exception()
    except Exception:
        print "Caught Exception"
except Exception:
    print "Caught Exception"

在Python中,是否可以像我试图做的那样将执行流程传递到最终的except Exception块?如果无法实现,是否有减少逻辑重复的策略?

2
是的。将处理“异常”的代码放入一个函数中。然后在两个地方调用该函数。 - kindall
except 子句只捕获在 try 中抛出的错误;否则,如果需要重新引发错误,则无法实现。 - jonrsharpe
1
嗯,你能解释一下你想要实现什么吗?重新引发一个被捕获的异常,但最终决定不处理它的标准方法是简单地使用 raise,无需其他任何代码。可能适用于这种情况,也可能不适用。从你的代码中无法判断。 - JL Peyret
1
我会给出比@JLPeyret更强的建议:不要使用异常来控制流程。你实际上想要实现什么?可能有更优雅的解决方案。 - rvs
1个回答

9
你可以再增加一层try嵌套:
try:
    try:
        raise KeyError()
    except KeyError:
        print "Caught KeyError"
        raise Exception()
except Exception:
    print "Caught Exception"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接