离开本地范围的Python异常?

时间:2015-03-18 15:38:42

标签: python variables exception scope

我最近在编写Python程序时发现了一些奇怪的行为。我的情况如下:

try:
    raise Exception("Meh!")
except Exception as e:
    print e

if e:
    print e

令我惊讶的是,这打印出“嗯!”两次,表明即使在try / except块结束后仍然可以访问异常“e”。

我的问题是这是python的预期行为还是更巧合。我能指望这一点能够永远有效吗?这不是官方行为吗?

我知道我可以添加另一个变量来捕获它,如下所示:

my_exception = None
try:
    raise Exception("Meh!")
except Exception as e:
    print e
    my_exception = e

if my_exception:
    print my_exception

但如果第一个版本不被视为黑客攻击,我倾向于,因为这意味着变量更少。

顺便说一下。我使用的是python 2.7.6。

由于

1 个答案:

答案 0 :(得分:1)

Try / except块不会在Python中创建新范围,这就是为什么你仍然可以在块之后使用e。 (This answer提供了有关Python范围的更多信息。)

但是,如果未引发异常,则永远不会创建e,因此如果没有if e发生,您将无法稍后执行UnboundLocalError