关于local variable 'i' referenced before assignment

如题,运行代码如下:

def createCounter():
    i = 0
    def counter():
        i+=1
        j = i
        return j
    return counter

代码执行后出错,错误信息为:local variable ‘i’ referenced before assignment

原因分析: 对于createCounter()函数,i是局部变量,而对于counter()函数,i是非全局的外部变量.当在counter()中对i进行修改时,会将i视作为counter()中的局部变量而屏蔽掉对于createCounter()中对i的定义,所以就会出现上述的’局部变量尚未分配’的异常.而若是仅仅在counter()中进行读取则不会发生上述问题,因为i对counter()是可见的.

解决方案: 使用nonlocal关键字,这样counter()就不会再将i视为其内局部变量而屏蔽掉createCounter()对i的定义.

猜你喜欢

转载自blog.csdn.net/Noonebirdyou/article/details/79833879