首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型误差Iter - Python3

类型误差Iter - Python3
EN

Stack Overflow用户
提问于 2015-01-30 23:07:16
回答 2查看 3.6K关注 0票数 10

有谁能解释一下为什么下面的代码

代码语言:javascript
复制
TypeError: iter() returned non-iterator of type 'counter'  in python 3

这在python2.7.3中运行,没有任何错误。

代码语言:javascript
复制
#!/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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-30 23:10:03

在python3.x中,您需要使用__next__()而不是next()

来自Python3.0的新特性是什么?

佩普3114:标准的next()方法已经重命名为__next__()。

但是,如果您希望您的对象在python2.x和3.X中都是可迭代的,则可以将next函数分配给名称__next__

代码语言:javascript
复制
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
票数 20
EN

Stack Overflow用户

发布于 2015-01-30 23:10:58

您需要的是__next__(self),而不是下一步:

代码语言:javascript
复制
def __next__(self): 
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28246107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档