函数中未定义的变量错误

时间:2017-09-25 14:53:40

标签: python python-3.x

我不明白为什么会出现错误

  

NameError:name' corpus'未定义

def pretreatment(fileName):
    with open(fileName, 'r') as file:

        global corpus 

        text = file.readlines()

        corpus = []

        for occurrence in text:
            occurrence = occurrence.replace('.',' ')
            occurrence = occurrence.replace(',',' ')
            occurrence = occurrence.replace(';',' ')
            occurrence = occurrence.replace('(',' ')
            occurrence = occurrence.replace(')',' ')
            occurrence = occurrence.replace('?',' ')
            occurrence = occurrence.replace('!',' ')
            occurrence = occurrence.replace(':',' ')

            corpus.append(occurrence)

    return corpus

def lexical_analysis(corpus):
    global corpus

    lexical_corpus = pretreatment(corpus)

    tokens = nltk.word_tokenize(lexical_corpus)

    return tokens

print(pretreatment("blabla.txt"))
print(lexical_analysis(corpus))

我在lexical_analysis函数中调用了预处理函数,但我仍然有一个未定义的变量错误。

我想利用并询问是否有办法以更优雅的方式使用替换功能。

编辑:感谢您的所有解释。我只是设法将变量声明为全局变量,我理解问题是什么,一切都运行得很好

  

全局变量名

2 个答案:

答案 0 :(得分:2)

corpus是函数'预处理`中的局部变量。仅仅因为你已经调用了函数并不意味着它将(或应该)开始存在于全局范围内。尝试阅读Python中的范围。

print(lexical_analysis(pretreatment('blabla.txt')) # should work

答案 1 :(得分:1)

语料库未在全局范围内定义,因此您收到错误。

你可以这样使用,

 corpus = pretreatment("blabla.txt")

 print(lexical_analysis(corpus)) 

print(lexical_analysis(pretreatment("blabla.txt")))