Python:函数需要正好1个参数(给出了2个)

9

我有一个类中的这个方法:

class CatList:

    lista = codecs.open('googlecat.txt', 'r', encoding='utf-8').read()
    soup = BeautifulSoup(lista)    
    # parse the list through BeautifulSoup
    def parseList(tag):
        if tag.name == 'ul':
            return [parseList(item)
                    for item in tag.findAll('li', recursive=False)]
        elif tag.name == 'li':
            if tag.ul is None:
                return tag.text
            else:
                return (tag.contents[0].string.strip(), parseList(tag.ul))

但是当我像这样调用它时:

myCL = CatList()
myList = myCL.parseList(myCL.soup.ul)

我有以下错误:
parseList() takes exactly 1 argument (2 given) 

我试着将self加入方法参数中,但是这样做后我遇到了以下错误:
global name 'parseList' is not defined 

我不太清楚这个实际上是如何工作的。

有什么提示吗?

谢谢。

1个回答

23

你忘记了 self 参数。

你需要修改这一行:

def parseList(tag):

with:

->

使用:

def parseList(self, tag):

你还遇到了一个全局命名错误,因为你试图访问 parseList 而没有使用 self


你应该做的是:

self.parseList(item)

在你的方法内部。

具体来说,你需要在你的代码中用两行完成这个操作:

 return [self.parseList(item)

 return (tag.contents[0].string.strip(), self.parseList(tag.ul))

谢谢,但正如我所说的那样,这就是我尝试过的,然后我得到了:全局名称'parseList'未定义 - slwr
2
要递归调用它,您需要编写 "self.parselist(tag.ul)"。 - Jonathan Vanasco
@silviolor,你在函数声明和调用中都加了“self”吗?在声明中作为第一个参数,在调用时作为“self.parse…”? - Mattias Nilsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接