Python len函数在if语句外正常执行但分支内不生效问题咨询
问题排查与解决方案
核心错误点
你代码的问题出在if判断逻辑完全不符合你提供的JSON结构:
info['resources'][i]['addresses']是字典组成的列表,不是单个字典- 你写的
'ip' in info['resources'][i]['addresses']含义是「判断列表中是否存在值为字符串ip的元素」,并不是「判断列表内的字典是否包含ip键」,这个判断逻辑本身就是错误的。
你提到if语句已成功触发,大概率是测试数据异常,或者你对if分支触发的判断有误(比如误加调试日志误以为进入了分支),Python内置的len函数本身不会出现「同一参数外部调用正常、if分支内调用无效」的问题。
正确代码参考
你不需要提前调用len获取长度做索引遍历,直接遍历addresses列表即可,代码可简化为:
# 遍历当前resource下的所有地址条目 for addr_item in info['resources'][i]['addresses']: # 仅当前条目存在ip键时才取值 if 'ip' in addr_item: ip.append(addr_item['ip'])
如果需要保留索引遍历的写法,也可以调整为:
addr_list = info['resources'][i]['addresses'] addr_count = len(addr_list) for j in range(addr_count): addr_item = addr_list[j] if 'ip' in addr_item: ip.append(addr_item['ip'])
排查建议
遇到类似问题时,可以在if分支内先打印info['resources'][i]['addresses']的实际值和类型,确认结构是否符合预期,就能快速定位问题。
内容的提问来源于stack exchange,提问作者Enigma
相关产品推荐
相关产品推荐

