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

for循环中出现RecursionError求助:字符串扁平化递归报错

问题原因

当代码处理到字符串'abc'时,由于字符串属于Iterable类型,会进入递归调用flatten('abc')。遍历'abc'的每个字符(比如'a')时,单个字符同样是str类型(也属于Iterable),于是会再次递归调用flatten('a')。而'a'的迭代元素还是'a',这就导致了无限递归,最终触发RecursionError。

解决方法

需要在判断是否递归时,排除字符串类型——只有当元素是可迭代对象但不是字符串时,才进行递归扁平化。修正后的代码如下:

from collections.abc import Iterable

def flatten(items):
    for x in items:
        # 仅对非字符串的可迭代对象递归
        if isinstance(x, Iterable) and not isinstance(x, str):
            yield from flatten(x)
        else:
            yield x

items = [2, [3, 4, [5, 6], 7], 8, 'abc']

for x in flatten(items):
    print(x, end=', ')
运行结果

执行后会输出:

2, 3, 4, 5, 6, 7, 8, a, b, c, 

这样就符合预期的扁平化效果,同时避免了无限递归的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:40:27