2012-02-15 8 views
7

tengo este método en una clasepitón: función toma exactamente 1 argumento (2 da)

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

pero cuando intento llamarlo así:

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

tengo el siguiente error :

parseList() takes exactly 1 argument (2 given) 

he intentado añadir uno mismo como un argumento para el método, pero cuando lo haga que el error que consigo es la siguiente:

global name 'parseList' is not defined 

No tengo muy claro cómo funciona esto en realidad.

¿Alguna pista?

Gracias

Respuesta

18

se le olvidó el argumento self.

Es necesario cambiar esta línea:

def parseList(tag): 

con:

def parseList(self, tag): 

También tiene un error de nombre global, ya que está tratando de acceder parseList sin self.
Mientras que usted debe hacer algo como:

self.parseList(item) 

dentro de su método.

Para ser más específicos, es necesario hacer eso en dos líneas de código:

return [self.parseList(item) 

y

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

, gracias, pero como he dicho, es lo que he intentado y yo a continuación, sale: nombre global 'parseList' no está definido – lorussian

+2

para recursivamente llamarlo, escribiría "self.parselist (tag.ul)" –

+0

@silviolor ¿Agregó el "self" a la función declataion y a la llamada? Como primer parámetro en la declaración y como "self.parse ..." cuando lo llamas? –

Cuestiones relacionadas