我在Python2.7和Python3.7之间在局部变量作用域上遇到了一个奇怪的区别。
考虑一下这个人工脚本unboundlocalexception.py (我意识到我本来可以在else之后使用一个其他块,但是我从一个更长的函数中提取了这个例子):
def foo():
arithmetic_error = None
try:
y = 1.0 / 0
except ZeroDivisionError as arithmetic_error:
print("I tried to divide by zero")
if arithmetic_error is None:
print("Correct division")
foo()在Python 2下,它的工作方式与我预期的一样:
$ python2 unboundlocalexception.py
I tried to divide by zero但是,令人惊讶的是,在Python3下引发了一个UnboundLocalError!
$ python3 unboundlocalexception.py
I tried to divide by zero
Traceback (most recent call last):
File "unboundlocalexception.py", line 11, in <module>
foo()
File "unboundlocalexception.py", line 8, in foo
if arithmetic_error is None:
UnboundLocalError: local variable 'arithmetic_error' referenced before assignment这种差异有任何记载吗?
发布于 2019-12-19 13:52:23
https://stackoverflow.com/questions/59410749
复制相似问题