2012-02-15 8 views
7

mam tej metody w klasiepython: funkcja przyjmuje dokładnie 1 argument (2 podano)

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)) 

ale gdy próbuję to nazwać tak:

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

Mam następujący błąd :

parseList() takes exactly 1 argument (2 given) 

próbowałem dodać siebie jako argument do metody, ale kiedy to robię, że błąd jest następujący:

global name 'parseList' is not defined 

niezbyt jasne, jak to działa.

Dowolna podpowiedź?

Dzięki

Odpowiedz

18

zapomniałeś self argument.

trzeba zmienić tę linię:

def parseList(tag): 

z:

def parseList(self, tag): 

też dostał globalny błąd nazwy, ponieważ próbujesz uzyskać dostęp parseList bez self.
Choć trzeba zrobić coś takiego:

self.parseList(item) 

wewnątrz swojej metody.

Mówiąc konkretnie, trzeba to zrobić w dwie linie kodu:

return [self.parseList(item) 

i

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

Dzięki, ale jak powiedziałem, że to, co starałem i wtedy otrzymamy: globalna nazwa "parseList" nie jest zdefiniowana – lorussian

+2

do rekursywnego wywoływania, pisałbyś "self.parselist (tag.ul)" –

+0

@silviolor czy dodałeś "self" zarówno do funkcji declataion, jak i połączenia? Jako pierwszy parametr w deklaracji i jako "self.parse ...", kiedy to nazywasz? –

Powiązane problemy