为什么异常参数没有被python

时间:2015-06-16 00:27:15

标签: python exception scope finally try-except

try:
    ...
except (SomeError) as err:
    ...
else:
    ...
finally:
    if err:
   ...

这会产生错误:'错误未定义'。因为异常参数 - err - 没有定义,就finally块而言。然后看起来异常参数是异常块的本地。

你可以通过将err复制到块外部定义的另一个变量来绕过它:

teleport = ""
try:
    ...
except (SomeError) as err:
    teleport = err
else:
    ...
finally:
    if teleport:
        ...

但为什么不能简单地在finally块中引用异常参数? (假设我没有忽略别的东西。)

2 个答案:

答案 0 :(得分:3)

try块将执行可能引发异常的代码。 except块将在引发异常的那一刻执行。如果没有引发,则执行else块,无论如何都执行finally块。

如果您可以在finally块中执行此操作,则无需检查else块中的异常。

除此之外,变量很可能是在except块执行结束时收集的垃圾。它与with块的情况类似。这就是你无法做if err:

的原因

答案 1 :(得分:0)

您不能仅仅因为未引发异常而访问,因此未定义变量,因此未定义的变量错误。除了在最后一个块中处理异常没有意义之外,你应该在块本身之外做这些事情。