2012-02-15 25 views
7

tôi có phương pháp này trong một lớp họcpython: hàm lấy chính xác 1 lập luận (2 nhất định)

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

nhưng khi tôi cố gắng gọi nó là như thế này:

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

Tôi có lỗi sau :

parseList() takes exactly 1 argument (2 given) 

Tôi đã cố gắng thêm tự làm đối số cho phương pháp nhưng khi tôi làm lỗi tôi nhận được như sau:

global name 'parseList' is not defined 

không rõ ràng về cách thức hoạt động thực sự của nó.

Bất kỳ gợi ý nào?

Cảm ơn

Trả lời

18

Bạn quên đối số self.

Bạn cần thay đổi dòng này:

def parseList(tag): 

với:

def parseList(self, tag): 

Bạn cũng có một lỗi tên toàn cầu, kể từ khi bạn đang cố gắng truy cập parseList mà không self.
Trong khi bạn nên làm điều gì đó như:

self.parseList(item) 

bên trong phương pháp của bạn.

Để cụ thể, bạn cần phải làm điều đó trong hai dòng mã của bạn:

return [self.parseList(item) 

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

Cảm ơn, nhưng như tôi đã nói đó là những gì tôi đã cố gắng và sau đó tôi nhận được: tên toàn cầu 'parseList' không được xác định – lorussian

+2

để gọi đệ quy nó, bạn sẽ viết "self.parselist (tag.ul)" –

+0

@silviolor bạn đã thêm "tự" vào cả hàm declataion và cuộc gọi? Là một tham số đầu tiên trong khai báo và là "self.parse ..." khi bạn gọi nó? –

Các vấn đề liên quan