“赋值前引用的局部变量”当“else”循环丢失时发出警告

时间:2017-11-09 22:03:47

标签: python python-3.x file pycharm

我有以下代码:

def readTweet():
    tweets = open("tweets.txt", "r", encoding="utf-8")
    counter = 0
    coordinates = []

    try:
        line = tweets.readline()    

        if line != "":      
            lineList = line.split()    
        else:       # <----- This statement
            return 0

        for word in lineList:
            phrase = word.strip("[],.?!#")      
            if counter == 0 or counter == 1:
                coordinates.append(float(phrase))
            counter = counter + 1

    except IOError:
        print("Input error, not a number.")

我的问题是当我删除else语句else: return 0时,我会收到警告

Local variable 'lineList' might be referenced before assignment

如果我要打印print(coordinates),我会得到相同的输出,无论else语句是否存在。我的问题是,为什么Python会给我这个警告?

1 个答案:

答案 0 :(得分:1)

此警告是正确的。

在第

        for word in lineList:

您可以在收到任何值之前访问linelist var。 但是,Python已知它是一个局部变量,因为它存在于本地范围的=的左侧。

考虑这个简单的例子:

a = 1

def foo():
    print(a)
    a = 2

foo()

在此代码中,afoo函数范围内的局部变量,它在print()调用之前被访问,然后才能获得任何值。