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 - 统一函数返回格式:不要在失败分支单独返回布尔值,可选两种处理方式:
- 连接失败时直接抛出明确的自定义异常,上层捕获异常处理失败逻辑,保证函数正常返回时结构固定为
(连接实例, 游标实例)的元组 - 失败分支返回
(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
相关产品推荐
相关产品推荐

