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

Python中if AssertionError代码块不生效且避免try-except隐藏测试失败问题

问题代码核心错误点
  • 执行顺序逻辑错误:assert语句一旦断言失败会直接抛出AssertionError异常,终止当前代码流程,永远不会执行到后续的if AssertionError:分支
  • 条件判断逻辑无效:AssertionError是异常类对象,作为布尔判断时永远为True,就算代码能走到这个分支,也会不管有没有发生异常都执行日志写入逻辑,不符合你的需求
  • 日志写入方式不规范:直接修改sys.stdout会影响后续所有打印逻辑,还可能出现文件句柄泄漏问题
符合需求的解决方案

你对try-except的顾虑是异常被捕获后没有抛出,才会导致测试框架误判用例执行成功,只要在except块完成日志记录后重新抛出原异常即可,完全不会影响测试报告的通过率统计。
修改后可用的代码如下:

else:
    try:
        assert context.json_response is not None
        assert float(context.json_response[0]['base_premium']) > float(1)
        assert float(context.json_response[0]['total_premium']) < float(1)
        assert float(context.json_response[0]['tax']) > float(1)
        print(context.json_response[0]["tax"])
    except AssertionError:
        # 写入错误日志
        json_data = context.payload
        with open("OD_Plans.log", "a", encoding="utf-8") as log_file:
            log_file.write("Test case failed due to assertion error\n")
            log_file.write(f"Previous Policy Status= {status}\n")
            log_file.write(f"expiry date= {exp_date}\n")
            log_file.write(f"Owner= {owner}\n")
            log_file.write(f"Registration Date= {reg_date}\n")
            log_file.write(f"Manufacturing Year= {man_yr}\n")
            log_file.write(f"Veichle Maker= {vchl_make}\n")
            log_file.write(f"Maker Code= {vchl_code}\n")
            log_file.write(json.dumps(json_data, indent=2) + "\n")
        # 重新抛出异常,测试框架可正常识别断言失败
        raise

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:06:03