【发布时间】:2015-05-29 21:42:37
【问题描述】:
我有以下代码:
def foo():
e = None
try:
raise Exception('I wish you would except me for who I am.')
except Exception as e:
print(e)
print(e)
foo()
在 Python 2.7 中,这会按预期运行并打印:
I wish you would except me for who I am.
I wish you would except me for who I am.
但是在 Python 3.x 中,第一行被打印,但第二行没有。它似乎删除了封闭范围内的变量,从最后一个打印语句给我以下回溯:
Traceback (most recent call last):
File "python", line 9, in <module>
File "python", line 7, in foo
UnboundLocalError: local variable 'e' referenced before assignment
几乎就像在except 块之后插入了del e 语句。这种行为有什么理由吗?如果 Python 开发人员希望 except 块拥有自己的本地范围,并且不会泄漏到周围的范围中,我可以理解,但是为什么必须删除之前分配的外部范围中的变量呢?
【问题讨论】:
标签: python exception python-3.x exception-handling