Python-die Definition einer iterator-Klasse ist fehlgeschlagen mit "iter() zurückgegeben, nicht-iterator des Typs 'Fib'"

Ich bin mit python 2.7 und ipython2.7.
In ipython habe ich versucht:

class Fib(object):
    def __init__(self, max):
        super(Fib, self).__init__()
        self.max = max

    def __iter__(self):
        self.a = 0
        self.b = 1
        return self

    def __next__(self):
        fib = self.a
        if fib > self.max:
            raise StopIteration
        self.a, self.b = self.b, self.a + self.b
        return fib

def main():
    fib = Fib(100)
    for i in fib:
        print i

if __name__ == '__main__':
    main()

Gut es meldet einen Fehler:

TypeError Traceback (most recent call last)
in ()
22
23 wenn Namen == 'main':
---> 24 main()
25

<ipython-input-21-f10bd2d06666> in main()
    18 def main():
    19     fib = Fib(100)
---> 20     for i in fib:
    21         print i
    22

TypeError: iter() returned non-iterator of type 'Fib'

Dieses Stück code ist eigentlich aus dem internet. Die gramma scheint OK für mich, aber wie das problem passiert?

Dank.

  • Es läuft gut in Python 3. Sie müssen entweder die starten mit Python 3, oder aktualisieren Sie den code für die Arbeit mit Python 2.
  • Ich weiß jetzt, dass die __next__() for Python ist3 und next() ist für python 2.7. Das ist so schwierig!
InformationsquelleAutor Troskyvs | 2016-12-02
Schreibe einen Kommentar