You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python动态迭代器类报错:iter()返回NoneType的问题求助

问题根源与解决方案

Hey,你的问题其实很典型——__iter__方法没有返回迭代器对象!

让我拆解一下:你的iter_function是生成器函数,调用它的时候会返回一个迭代器没错,但你的__iter__方法只是调用了这个函数,却没有把生成的迭代器返回出去。Python中如果函数没有显式return语句,默认会返回None,这就导致iter(a)得到了None,自然触发TypeError。

修正后的类代码

只需要给__iter__加上return就行:

class fib:
    def __init__(self, items, iter_function):
        self.iter_function = iter_function
        self.items = items
    def __iter__(self):
        # 关键:返回迭代器函数生成的迭代器实例
        return self.iter_function(self.items)

测试验证

用你的两个迭代器函数测试:

def iter_func(items):
    for item in items:
        yield item

def iter_func2(items):
    for item in items:
        yield item*2

# 测试第一个迭代器
a = fib([1,2,3], iter_func)
a_iterator = iter(a)
print(next(a_iterator))  # 输出 1
print(next(a_iterator))  # 输出 2
print(next(a_iterator))  # 输出 3

# 测试第二个迭代器(元素翻倍)
b = fib([1,2,3], iter_func2)
b_iterator = iter(b)
print(next(b_iterator))  # 输出 2
print(next(b_iterator))  # 输出 4
print(next(b_iterator))  # 输出 6

额外小建议

按照Python的命名规范,类名应该使用大驼峰命名法,比如把fib改成Fib,这样代码可读性更好~

内容的提问来源于stack exchange,提问作者Ahmadov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:00:08