我最近在编写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。
由于
答案 0 :(得分:1)
Try / except块不会在Python中创建新范围,这就是为什么你仍然可以在块之后使用e
。 (This answer提供了有关Python范围的更多信息。)
但是,如果未引发异常,则永远不会创建e
,因此如果没有if e
发生,您将无法稍后执行UnboundLocalError
。