嵌套异常?

mpe*_*pen 14 python

这会有用吗?

try:
    try:
        field.value = filter(field.value, fields=self.fields, form=self, field=field)
    except TypeError:
        field.value = filter(field.value)
except ValidationError, e:
    field.errors += e.args
    field.value = revert
    valid = False
    break              
Run Code Online (Sandbox Code Playgroud)

也就是说,如果第一行抛出一个ValidationError,第二行会except抓住它吗?

我会把它写成非嵌套的,但第二个过滤语句也会失败!而且我想使用相同的ValidationError块来捕获它.

我自己测试一下,但这段代码交织在一起很难正确地绊倒它:)

作为旁注,依靠它来捕捉TypeError和传递只有一个arg是不是很糟糕?即故意省略一些不需要它们的论据?

Bre*_*ode 21

如果内部try中的filter语句引发异常,它将首先针对内部"except"语句集进行检查,然后如果没有捕获它,则将根据外部"except"语句集进行检查.

你可以通过做这样简单的事情来说服自己就是这种情况(这只会打印"捕获值错误"):

try:
    try:
        raise ValueError('1')
    except TypeError:
        print 'Caught the type error'
except ValueError:
    print 'Caught the value error!'
Run Code Online (Sandbox Code Playgroud)

作为另一个例子,这个应该只打印"抓住内部ValueError":

try:
    try:
        raise ValueError('1')
    except TypeError:
        pass
    except ValueError:
        print 'Caught the inner ValueError!'
except ValueError:
    print 'Caught the outer value error!'
Run Code Online (Sandbox Code Playgroud)