我有以下代码:
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
块具有自己的局部作用域,并且不会泄漏到周围作用域,我可以理解它,但为什么必须删除先前分配的外部作用域变量呢?