关于python:获取UnboundLocalError:在赋值错误之前引用的局部变量

getting UnboundLocalError: local variable referenced before assignment error

我正在获取UnboundLocalError:尝试运行此代码时,在赋值错误之前引用了局部变量。根据立法会的规则,这应该运行良好。

1
2
3
4
5
6
7
def xyz():
    count = 1
    def xyz_inner():
        count += 1
        print count
    xyz_inner()
    print count


这里的问题是,内部函数中的count受(增广的)赋值语句约束,因此被视为xyz_inner()的局部。因此,代码第一次尝试执行count += 1时,(本地)变量count以前没有被赋值,因此它确实是一个未绑定的本地变量。

xyz_inner()中使用nonlocal count应该通过告诉口译员你想使用xyz()count而不是创建一个本地的来解决这个问题。


请参阅未绑定的本地错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def xyz():
    count = 1
    def xyz_inner():
        count += 1
        print count, locals()
    xyz_inner()
    print count

print hasattr(globals, 'count')
print hasattr(xyz, 'count')

>>>
False
False

在任何可变对象(如dictlist中定义变量(使用相同的引用),并使用增强赋值更新变量。

它的工作原理是:

1
2
3
4
5
6
7
8
9
def xyz():
    count = {'value': 1}
    def xyz_inner():
        count['value'] += 1
        print count['value'],
    xyz_inner()
    print count

xyz()

参见python2.7中非本地的python闭包