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

Python3.7报错TypeError: cannot unpack non-iterable bool object求助

Python 3.7 报错 TypeError: cannot unpack non-iterable bool object 排查修复

报错回溯

Traceback (most recent call last):
...
  File "C:\Users\rafin\Dyna\updews-pycodes\dynadb\db.py", line 251, in read
    db, cur = connect(host=host, connection=connection,
TypeError: cannot unpack non-iterable bool object

根因说明

报错触发点在db.py第251行的拆包赋值逻辑:代码预期connect()函数返回包含2个元素的可迭代对象(通常为元组,分别存储数据库连接实例、游标实例),但实际运行时connect()返回了布尔类型值(True/False,绝大多数场景是连接逻辑触发异常、校验不通过时返回了False)。布尔类型不属于可迭代对象,无法完成拆包赋值给两个变量的操作,因此抛出类型错误。

修复步骤

  • 定位connect()函数的所有返回分支,重点检查异常捕获、参数校验、连接状态判断的分支:这类分支很容易出现直接return False的写法,和成功分支返回(db, cur)元组的格式不一致,是触发该报错的最常见原因。
    典型错误写法参考:
    def connect(host, connection):
        try:
            db = pymysql.connect(host=host) # 实际数据库连接逻辑
            cur = db.cursor()
            if not connection:
                # 校验不通过直接返回布尔值,结构不匹配
                return False
            return (db, cur)
        except Exception as e:
            print("连接异常:", e)
            # 异常分支直接返回布尔值,结构不匹配
            return False
    
  • 统一函数返回格式:不要在失败分支单独返回布尔值,可选两种处理方式:
    1. 连接失败时直接抛出明确的自定义异常,上层捕获异常处理失败逻辑,保证函数正常返回时结构固定为(连接实例, 游标实例)的元组
    2. 失败分支返回(None, None)这类结构和成功分支一致的元组,上层拆包后再判断实例是否合法
  • 增加拆包前校验,避免直接拆包未知返回值:
    connect_res = connect(host=host, connection=connection)
    if not isinstance(connect_res, tuple) or len(connect_res) != 2:
        raise RuntimeError("数据库连接失败,未获取到合法的连接与游标实例")
    db, cur = connect_res
    
  • 额外校验:检查第251行传入connect()的参数是否合法,是否因参数错误触发了函数的提前返回分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:39:28