2012-02-15 14 views
7

मैं एक वर्गअजगर: समारोह वास्तव में 1 तर्क (2 दिए गए)

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) 

मैं विधि के लिए एक तर्क के रूप स्वयं जोड़ने की कोशिश की लेकिन जब मैं कर त्रुटि मैं निम्नलिखित है:

global name 'parseList' is not defined 

यह वास्तव में मुझे स्पष्ट नहीं करता कि यह वास्तव में कैसे काम करता है।

कोई संकेत?

धन्यवाद

उत्तर

18

आप self तर्क भूल गया। जब से तुम self बिना parseList का उपयोग करने की कोशिश कर रहे हैं,

def parseList(self, tag): 

तुम भी एक वैश्विक नाम त्रुटि मिली:

def parseList(tag): 

साथ:

आप इस लाइन को बदलने की जरूरत।
आप की तरह कुछ करने के लिए चाहिए:

self.parseList(item) 

अपने विधि के अंदर।

विशिष्ट होना करने के लिए, आपको बस इतना करना है कि अपने कोड की दो पंक्तियाँ में:

return [self.parseList(item) 

और

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

धन्यवाद, लेकिन जैसा कि मैंने कहा कि यह मैं क्या करने की कोशिश की और मैं तो प्राप्त होते हैं: वैश्विक नाम 'parseList' को – lorussian

+2

को बार-बार कॉल करने के लिए परिभाषित नहीं किया गया है, तो आप "self.parselist (tag.ul)" –

+0

@silviolor लिखेंगे, क्या आपने फ़ंक्शन अस्वीकरण और कॉल दोनों में "स्वयं" जोड़ा था? घोषणा में पहले पैरामीटर के रूप में और "self.parse ..." के रूप में जब आप इसे कॉल करते हैं? –

संबंधित मुद्दे