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
相关产品推荐
相关产品推荐

