2

我们有内部尝试例外,例如

try:

    try: (problem here)

    except: (goes here)

except: (will it go here) ??

这是 try excepts 的当前流程吗?如果外部 try 块内部捕获到异常,它是错误还是非错误?

4

3 回答 3

6

不,它不会出现在第二个 except 中,除非第一个也引发异常。

当您进入该except子句时,您几乎是在说“异常被捕获,我会处理它”,除非您重新引发异常。例如,这个结构通常非常有用:

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

这允许您对同一异常进行多层“修复”。

于 2013-02-26T13:27:44.960 回答
4

它不会到达外部except,除非您在该异常中引发另一个异常,如下所示:

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

除非内部except块引发了适合外部块的异常,否则它不会被视为错误。

于 2013-02-26T13:28:27.650 回答
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'AND 'cannot divide by zero'

于 2013-02-26T13:29:58.553 回答