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块中引用异常参数? (假设我没有忽略别的东西。)
答案 0 :(得分:3)
try
块将执行可能引发异常的代码。 except
块将在引发异常的那一刻执行。如果没有引发,则执行else
块,无论如何都执行finally
块。
如果您可以在finally
块中执行此操作,则无需检查else
块中的异常。
除此之外,变量很可能是在except
块执行结束时收集的垃圾。它与with
块的情况类似。这就是你无法做if err:
答案 1 :(得分:0)
您不能仅仅因为未引发异常而访问,因此未定义变量,因此未定义的变量错误。除了在最后一个块中处理异常没有意义之外,你应该在块本身之外做这些事情。