加载JSON文件判断list_no存在性时报错TypeError,求修复方案
解决TypeError并实现JSON中list_no的校验逻辑
报错原因
你遇到的TypeError: list indices must be integers or slices, not str,是因为data['results']对应的是**列表(list)**而非字典(dict)。列表只能用整数索引或切片访问,用字符串'list_no'去索引自然会报错。
修正后的代码
结合你的需求(不存在list_no或内容不符合要求则终止脚本),以下是修正并完善后的代码:
import sys import json # 加载JSON文件 with open('C:/ftpfiles/itemdatasku.json') as json_file: data = json.load(json_file) try: # 从data中取出results列表(根据你的JSON结构,若results是单个元素列表则取索引0,按需调整) results_list = data['results'] # 假设results列表中第一个元素包含list_no字段,根据实际JSON结构修改索引 target_item = results_list[0] # 获取list_no并校验内容 list_no = target_item['list_no'] # 这里替换成你实际的校验规则,示例:检查是否为非空字符串 if not isinstance(list_no, str) or not list_no.strip(): print("list_no内容不符合要求") sys.exit() # 到这里说明list_no存在且符合要求,执行后续代码 print("list_no校验通过,继续执行") # --- 后续业务代码写在这里 --- except KeyError as err: print(f"缺失必要字段: {err}") sys.exit() except IndexError: print("results列表为空或索引超出范围") sys.exit() except TypeError as err: print(f"数据类型错误: {err}") sys.exit()
关键修复点
- 处理列表类型的results:先取出
data['results']列表,再通过整数索引获取包含list_no的元素(如果你的JSON中results是多元素列表,可改为遍历检查)。 - 补充内容校验:新增了对
list_no内容的校验逻辑,你可以根据需求修改(比如检查格式、长度、数值范围等)。 - 修复无效代码:原代码中
sys.exit()后的print("not exists")永远不会执行,因为sys.exit()会直接终止脚本,现在将提示打印放在sys.exit()之前。 - 完善异常捕获:新增了
IndexError(处理列表为空或索引越界)和通用TypeError的捕获,避免脚本因意外情况崩溃。
内容的提问来源于stack exchange,提问作者Alex Co
相关产品推荐
相关产品推荐

