2015-01-30 9 views
7

किसी कृपया समझा क्यों निम्नलिखित कोडप्रकार त्रुटि आईटीईआर - python3

TypeError: iter() returned non-iterator of type 'counter' in python 3 

दे रहा है यह किसी भी त्रुटि के बिना अजगर 2.7.3 में काम कर रहा है।

#!/usr/bin/python3 

class counter(object): 

    def __init__(self,size): 
     self.size=size 
     self.start=0 

    def __iter__(self): 
     print("called __iter__",self.size) 
     return self 

    def next(self): 
     if self.start < self.size: 
      self.start=self.start+1 
      return self.start 
     raise StopIteration 

c=counter(10) 
for x in c: 
    print(x) 

उत्तर

16

python3.x में आप __next__() बजाय next() उपयोग करने के लिए की जरूरत है।

What’s New In Python 3.0 से

:

PEP 3114: मानक अगले() विधि __ __next को नाम दिया गया है()।

हालांकि, अगर आप चाहते हैं iterable दोनों अजगर 2.x और 3.x में आप नाम __next__ करने के लिए अपने next समारोह असाइन कर सकते हैं होने के लिए अपने ऑब्जेक्ट।

class counter(object): 

    def __init__(self,size): 
     self.size=size 
     self.start=0 

    def __iter__(self): 
     print("called __iter__",self.size) 
     return self 

    def next(self): 
     if self.start < self.size: 
      self.start=self.start+1 
      return self.start 
     raise StopIteration 

    __next__ = next # Python 3.X compatibility 
5

आप __next__(self) अगले नहीं की जरूरत है:

def __next__(self):