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

能否在assert断言的报错信息中输出触发断言的变量值

问题原因

你写的代码无法生效的核心原因是:Python3 中生成器表达式拥有独立的私有作用域,all() 内部生成器里定义的 l1、l2、e 变量不会泄露到外层上下文,所以断言错误信息里的 {l2} 会直接触发 NameError,根本读取不到对应值。


解决方案

方案1:改用显式嵌套循环校验(最直观,可灵活扩展报错信息)

直接拆分嵌套逻辑逐元素校验,遇到非法值时主动抛出断言错误,此时可以自由获取当前层级的所有变量值:

for l1 in sequence.values():
    for l2 in l1:
        for e in l2:
            if not isinstance(e, int):
                # 还可以额外打印出具体非法的元素e,方便定位
                raise AssertionError(f"字典的值不是整数嵌套列表,问题出现在:{l2},非法元素为{e}")

方案2:用next预查非法值(写法更简洁,保留单行断言的风格)

先通过生成器找到第一个不符合要求的 l2,再做断言判断:

# 找到第一个包含非int元素的l2,全部符合要求则返回None
invalid_l2 = next(
    (l2 for l1 in sequence.values() for l2 in l1 for e in l2 if not isinstance(e, int)),
    None
)
assert invalid_l2 is None, f"字典的值不是整数嵌套列表,问题出现在:{invalid_l2}"

内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:24:04