这导致
UnboundLocalError: cannot access local variable 'ans' where it is not associated with a value
.
def a():
ans = 4
def traverse():
if ans == 2:
pass
if True:
ans = 3
traverse()
print(ans)
a()
打印出 4:
def a():
ans = 4
def traverse():
if ans == 2:
pass
traverse()
print(ans)
a()
为什么在第二个代码中
ans == 2
行没有错误,但在第一种情况下有?
在第一个示例中,
ans
被声明为 traverse
中的局部变量,但是因为这是在第一次访问之后,您会得到一个错误:
def traverse():
if ans == 2: # no local 'ans' exists yet!
pass
if True:
ans = 3 # ans is a local var
在第二个例子中,
ans
内部没有对traverse
的赋值,所以使用了外部作用域的变量:
def traverse():
if ans == 2: # 'ans' refers to the outer scope
pass
你可能想要做的是声明
ans
是nonlocal
,这样赋值修改非本地变量而不是在本地范围内创建一个新变量:
def a():
ans = 4
def traverse():
nonlocal ans
if ans == 2:
pass
if True:
ans = 3
traverse()
print(ans) # prints 3
a()