Python function: takes exactly 1 argument (2)

I have this method in the class

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

but when I try to call it like this:

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

I have the following error:

 parseList() takes exactly 1 argument (2 given) 

I tried to add myself as an argument to the method, but when I do this, I get the following:

 global name 'parseList' is not defined 

it’s not entirely clear how this works.

Any clues?

thanks

+7
source share
1 answer

You forgot the self argument.

You need to change this line:

 def parseList(tag): 

from:

 def parseList(self, tag): 

You also got a global name error, since you are trying to access parseList without self .
Although you need to do something like:

 self.parseList(item) 

inside your method.

To be specific, you need to do this in two lines of your code:

  return [self.parseList(item) 

and

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

All Articles