2016-04-25 13 views
0

Ich versuche, einen Code zu erstellen, der die __iter__() Verfahren als Generator verwendet, aber ich erhalte eine Fehlermeldung, dass:Typeerror: Objekt übernimmt keine Parameter

TypeError: object() takes no parameters.

Außerdem habe ich nicht sicher bin, ob meine Ertragsfunktion sollte innerhalb versucht werden: oder innerhalb der main() Funktion

Ich bin relativ neu zu Python und Codierung, so dass alle Vorschläge und Ratschläge sehr geschätzt werden, so dass ich lernen kann. Vielen Dank!

class Counter(object): 

    def __init__(self, filename, characters): 
     self._characters = characters 
     self.index = -1 

     self.list = [] 
     f = open(filename, 'r') 
     for word in f.read().split(): 
      n = word.strip('!?.,;:()$%') 
      n_r = n.rstrip() 
      if len(n) == self._characters: 
       self.list.append(n) 

    def __iter(self): 
     return self 

    def next(self): 
     try: 
      self.index += 1 
      yield self.list[self.index] 

      except IndexError: 
       raise StopIteration 
      f.close() 

if __name__ == "__main__": 
    for word in Counter('agency.txt', 11): 
     print "%s' " % word 
+0

Bitte geben Sie die Rückverfolgung der Fehler enthalten, es hilft. – Roberto

+0

... Ihren '__init'-Methoden fehlen am Ende zwei Unterstriche. Es ist "__init__". Das könnte den Fehler verursachen. – Roberto

+1

Und auch zu weit eingerückt. – hayavuk

Antwort

0

Verwenden yield für Funktion __iter__:

class A(object): 
    def __init__(self, count): 
     self.count = count 

    def __iter__(self): 
     for i in range(self.count): 
      yield i 

for i in A(10): 
    print i 

In Ihrem Fall __iter__ vielleicht so etwas wie folgt aussieht:

def __iter__(self): 
    for i in self.list: 
     yield i 
0

Sie die Deklaration der __init__ Methode verschrieben haben, den Sie eingegeben haben:

def __init 

Statt:

def __init__ 
+0

Oh wow, ich kann nicht glauben, dass ich das vermisst habe. Froh, dass dieses Problem nur ein dummer Tippfehler war, jetzt sagt mir der Fehler: TypeError: 'Counter' Objekt ist nicht iterierbar. Gedanken? –

+1

@ D.Lopez Das gleiche gilt für 'def __iter__' – user312016

Verwandte Themen