2012-08-10 4 views
4

Недавно я начал изучать, как использовать python для разбора XML-файлов. Я взял учебник от http://pyxml.sourceforge.net/topics/howto/node12.htmlТипError: __init __() принимает ровно 1 аргумент (3 данных) pyXML

Когда я запускаю следующий код, я получаю ошибку:

Traceback (most recent call last): 
    File "C:\Users\Name\Desktop\pythonxml\tutorials\pythonxml\pyxml sourceforge\5.1 Comic Colection\SearchForComic.py", line 30, in -toplevel- 
    dh = FindIssue('sandman', '62') 
TypeError: __init__() takes exactly 1 argument (3 given) 

код:

from xml.sax import saxutils 

class FindIssue(saxutils.DefaultHandler): 
    def __init___(self, title, number): 
     self.search_title, self.search_number = title, number 

def startElement(self, name, attrs): 
    #if it's not a comic element, ignore it 
    if name!= 'comic': return 

     # look for the title and number sttributes (see text) 
     title = attrs.get('title', None) 
     number = attrs.get('number', None) 
     if (title == self.search_title and 
      number == self.search_number): 
       print title, '#' +str (number), 'found' 

from xml.sax import make_parser 
from xml.sax.handler import feature_namespaces 

if __name__ == '__main__': 
     #Create a parser 
     parser = make_parser() 

    #tell the parser that we are not interested in XML namespaces 
     parser.setFeature(feature_namespaces, 0) 

    #create the handler 
    dh = FindIssue('sandman', '62') 

    #tell the parse to use our handler 
    parser.setContentHandler(dh) 

    #parse the input 
    parser.parse('collection.xml') 

также на последней строке я прохождения файл в текущем рабочем каталоге - это правильный способ обращения к файлу?

ответ

8

У вас слишком много _ от имени __init__. Объявление конструктора должно быть:

def __init__(self, title, number): 

нет:

def __init___(self, title, number): 
+0

человек я не могу поверить, я не заметил, что –

+4

это своего рода запутанная ошибка. Поскольку izkata указал, что '' __init__' не существует, python возвращается к конструктору по умолчанию, который принимает только self как аргумент, поэтому python жалуется на слишком много аргументов функции, которую вы видите как имеющей правильный номер. –

4

У вас есть опечатка - есть 3 подчеркивает здесь:

def __init___(self, title, number): 

Должен быть:

def __init__(self, title, number): 

Потому что он не точно соответствует h имя __init__, Python знает только о конструкторе по умолчанию, def __init__(self).

Смежные вопросы