Тип ошибки Iter-Python3
может кто-нибудь объяснить, почему следующий код дает
TypeError: iter() returned non-iterator of type 'counter' in python 3
это работает в Python 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)
2 ответов
в питон3.x вам нужно использовать __next__()
вместо next()
.
PEP 3114: стандартный метод next () был переименован в __next__().
однако, если вы хотите, чтобы ваш объект должен быть итерируемым как в Python 2.X и 3.X вы можете назначить на имя __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