Python循环前添加检查规避IndexError: list index out of range错误
解决Python循环中的IndexError问题
问题场景
执行以下循环代码时:
for fact_entry in range(len(facts['items'][0]['facts'])): [...]
当facts为以下空内容结构时:
{'items': [], 'totalCount': 0, 'partialResults': False, 'metadata': {'processingTime': 2}}
会触发IndexError: list index out of range,原因是facts['items']是空列表,无法通过[0]索引获取元素。
解决方案
在进入循环前添加检查,确保访问路径的有效性,以下是几种可行方式:
基础检查(适配当前报错场景)
先判断facts['items']是否非空,为空则直接跳过循环:
if facts['items']: for fact_entry in range(len(facts['items'][0]['facts'])): [...]
注:空列表在布尔判断中会被视为False,因此该判断可以直接筛选出有元素的情况。
严谨多层检查(避免其他潜在报错)
如果需要防范items不存在、或第一个元素没有facts键的情况,可以扩展检查逻辑:
# 依次检查items存在且非空、第一个元素包含facts键 if 'items' in facts and facts['items'] and 'facts' in facts['items'][0]: for fact_entry in range(len(facts['items'][0]['facts'])): [...]
或者使用get方法提升容错性:
items = facts.get('items', []) if items and 'facts' in items[0]: for fact_entry in range(len(items[0]['facts'])): [...]
更Pythonic的遍历写法
如果不需要使用fact_entry这个索引值,直接遍历facts中的目标元素会更简洁:
if facts['items']: for fact in facts['items'][0]['facts']: # 直接操作fact,替代通过索引访问 [...]
内容的提问来源于stack exchange,提问作者Thrama
相关产品推荐
相关产品推荐

