内部尝试除了Python之外 - 流程如何工作?

时间:2013-02-26 13:26:09

标签: python except

我们有内心的尝试,例如

try:

    try: (problem here)

    except: (goes here)

except: (will it go here) ??

这是正确的尝试流程吗?如果外部try块内部被捕获异常,则是错误还是非错误?

3 个答案:

答案 0 :(得分:6)

不,除非第一个引发异常,否则它不会进入第二个。

当你进入except子句时,你几乎都说“异常被捕获,我将处理它”,除非你重新提出异常。例如,这个结构通常非常有用:

try:
    some_code()
    try:
        some_more_code()
    except Exception as exc:
        fix_some_stuff()
        raise exc
except Exception as exc:
    fix_more_stuff()

这允许您为同一个异常提供多个“修复”层。

答案 1 :(得分:4)

它不会到达外部except,除非你在那个内部引发另一个例外,如下所示:

try:
    try:
        [][1]
    except IndexError:
        raise AttributeError
except AttributeError:
    print("Success! Ish")

除非内部except块引发外部块的异常,否则不会将其视为错误。

答案 2 :(得分:1)

错误不会触及外部Except。您可以像这样测试它:

x = 'my test'
try:
    try: x = int(x)
    except ValueError: print 'hit error in inner block'
except: print 'hit error in outer block'

这只会打印'hit error in inner block'

但是,在内部Try / Except块之后再说一些其他代码,这会引发错误:

x, y = 'my test', 0
try:
    try: x = int(x)
    except ValueError: print 'x is not int'
    z = 10./y
except ZeroDivisionError: print 'cannot divide by zero'

这会同时打印'x is not int''cannot divide by zero'