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

Python三层嵌套if条件全部匹配却无法进入最内层执行assert语句求助

代码无法进入内层if块的问题原因

核心问题1:日期字符串直接比较逻辑错误

Python中字符串的大小比较是逐字符按ASCII码值对比,你使用的DD-MM-YYYY格式的日期字符串直接比较时,会优先对比「日」的数值,再依次对比月、年,和实际日期的先后判断逻辑完全不符:

  • 测试数据中exp_date = '30-10-2021',context.end_date = '12-12-2021',字符串比较时第一个字符'3'的ASCII码远大于'1',所以exp_date < context.end_date直接返回False,第一层if判断就不满足,自然不会进入内层代码。
  • 第二层reg_date > '01-09-2018'的判断也存在相同隐患,例如'01-10-2018'字符串小于'02-09-2018',但实际10月的日期晚于9月,判断结果完全错误。

核心问题2:可能存在类型不匹配

如果入参man_yr是字符串类型的'2018',而context.expctd_manu_year是整数类型的2018,Python中'2018' == 2018会返回False,也会导致第三层if判断不通过。

修复方案

将所有日期转换为datetime类型后再比较,同时统一对比变量的类型,参考修改后的代码:

from datetime import datetime

# 定义对应DD-MM-YYYY格式的日期解析规则
DATE_FORMAT = "%d-%m-%Y"

def step_impl(context, status, exp_date, owner, reg_date, man_yr, vchl_make, vchl_code):
    if datetime.strptime(exp_date, DATE_FORMAT) < datetime.strptime(context.end_date, DATE_FORMAT):
        if datetime.strptime(reg_date, DATE_FORMAT) > datetime.strptime('01-09-2018', DATE_FORMAT):
            if int(man_yr) == int(context.expctd_manu_year):
                assert int(context.json_response[0]['base_premium']) > 1
                assert int(context.json_response[0]['total_premium']) > 1
                assert int(context.json_response[0]['tax']) > 1
                print(context.json_response[0]["tax"])

冗余的else: pass可以直接删除,Python中没有else分支时默认不执行任何操作,不影响逻辑。

内容的提问来源于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 04:54:06