如何避免这个“赋值前引用的变量”?

时间:2015-08-31 06:40:24

标签: python python-2.7

遇到以下问题。这可能是一个简单的解决方案,之前可能已经在这里问过,但我找不到它。

def a():
    liA = []
    def b():
        for i in liA:
            i += 1
        liB = generateList()
        for i in liB:
            i -= 1
        liA = liB

    def generateList():
        return [1,2,3,4]

    b()

a()

UnboundLocalError:在赋值之前引用的局部变量'liA'

2 个答案:

答案 0 :(得分:4)

<{1}}函数中的

liA变量永远不会被初始化。

因此,您应该按照以下方式编辑代码:

b()

希望我帮助过你!

答案 1 :(得分:1)

如果您查看整个堆栈跟踪,您可以更好地了解错误的发生方式。

Traceback (most recent call last):
  File "/Users/jwp/Desktop/junk.py3", line 16, in <module>
    a()
  File "/Users/jwp/Desktop/junk.py3", line 14, in a
    b()
  File "/Users/jwp/Desktop/junk.py3", line 4, in b
    for i in liA:
UnboundLocalError: local variable 'liA' referenced before assignment

因此,当您致电b()而未在liA的上下文中声明b(),然后在作业liA = liB中使用它时,会引发错误。< / p>

最明显的答案是将liA作为参数传递给b()。像这样:

def a():
    liA = []
    def b(inlist):
        liA = inlist
        for i in liA:
            i += 1
        liB = generateList()
        for i in liB:
            i -= 1
        liA = liB

    def generateList():
        return [1,2,3,4]

    b(liA)

a()

这是否符合您的需求?