我有以下代码:
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中,第一行是打印的,但第二行不是 . 它似乎删除了封闭范围中的变量,从最后一个print语句给出了以下回溯:
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开发人员想要除了块有自己的本地范围,而不是泄漏到周围的范围,但为什么必须删除以前分配的外部范围中的变量?
1 回答
引用documentation of try,
这包括在这两个PEP中 .
PEP 3110 - Catching Exceptions in Python 3000
PEP 344 - Exception Chaining and Embedded Tracebacks