TypeError:'function'对象不可迭代'Python 3

时间:2017-11-16 22:57:50

标签: python python-3.x file error-handling

我正在尝试编写一个程序,它将从包含10,000个单词的Web打开一个文本文件,然后“清理”该文件以消除无意义的单词,例如'aa'。我最终想用这些词来做其他事情,所以我想添加非“无意义”的词汇放入新的列表中。每次我尝试运行此操作时,都会遇到错误代码TypeError: 'function' object is not iterable

import urllib.request  

def readWordList():  

response = urllib.request.urlopen("http://www.mit.edu/~ecprice/wordlist.10000")
html = response.read()
data = html.decode('utf-8').split()

return data

clean = readWordList() 

def clean(aList):   
    newList = []
    for word in aList: 
        if range(len(word)) >= 2:
            newList.append(word)
    return newList


clean(clean)

3 个答案:

答案 0 :(得分:4)

下定决心:clean应该是列表还是函数?你从一个列表开始,然后用一个函数替换它,然后告诉函数清理它自己。试试这个:

dirty_list = readWordList()
def clean(aList):
...

clean(dirty_list)

答案 1 :(得分:1)

您创建一个名为clean的变量,通过声明具有相同名称的函数立即覆盖该名称,然后将函数clean传递给自身。

使用相同的名称更改函数名称或上面的变量。

答案 2 :(得分:1)

首先,您创建一个名为clean的变量,然后创建一个名为clean的函数,最后您尝试在变量中使用该函数,这两个函数都称为clean。你"销毁"定义函数时的变量。他们必须有不同的名字。

使用此:

import urllib.request  

    def readWordList():  

    response = urllib.request.urlopen("http://www.mit.edu/~ecprice/wordlist.10000")
    html = response.read()
    data = html.decode('utf-8').split()

    return data

    to_clean = readWordList() # Use a different name so it won't be replaced later by the function
        def clean(aList):   
        newList = []
        for word in aList: 
            if range(len(word)) >= 2:
                newList.append(word)
        return newList
    clean(to_clean)

解决问题;现在他们有不同的名字。