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

Python TypeError: 'bool' object is not iterable报错解决

报错产生原因
  • all()是Python内置的聚合判断函数,必须传入可迭代对象(列表、生成器、元组等可遍历的结构)作为参数,它会遍历入参的每一个元素,当所有元素都为真值时返回True,否则返回False。
  • 你原始代码里写的all(v == 0),传入的参数是v == 0的运算结果——这是一个单次布尔比较,返回值只能是True或者False,属于布尔类型,本身是不可遍历的。当all()尝试遍历这个布尔值的时候,就会抛出TypeError: 'bool' object is not iterable错误。
  • 原始代码还有额外的逻辑问题:你把全零判断写在了for v in thelist的循环内部,就算参数传对,也会在遍历每一个列表元素的时候重复执行一次全列表校验,既浪费性能,还会针对每个元素重复打印判断结果,不符合需求。
使用all()判断列表所有值为0的正确实现

核心要求是给all()传入「遍历列表每个元素做等值判断」的可迭代结构,同时把全量判断放在元素遍历循环的外部,避免重复执行。

标准写法示例

def checklist(thelist):
    if len(thelist) > 2:
        # 单次遍历检查是否存在负值
        for v in thelist:
            if v < 0.0:
                print("One negative")
        # 全零判断:传入生成器表达式,逐个校验列表元素是否等于0
        if all(vs == 0 for vs in thelist):
            print("All zero")
        else:
            print("All good")

alist = [0.0, -0.1, 0.3, 0.0]
checklist(alist)

注意事项

  • 如果列表里的0是浮点计算得到的结果,不建议直接用==判断,应该用精度阈值规避浮点误差,比如写成all(abs(vs) < 1e-9 for vs in thelist)。
  • 也可以给all()传入列表推导式作为参数,比如all([vs == 0 for vs in thelist]),但生成器表达式不需要提前生成完整的布尔值列表,内存占用更低,长列表场景下性能更好。
  • 不要把全列表判断放在单元素遍历的循环内部,否则列表长度为N就会重复执行N次全量校验,属于无意义的性能损耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:48:25