调用get_injection_status函数触发TypeError:string indices must be integers
排查TypeError: string indices must be integers问题
这个错误的核心原因是你在代码里把字符串当成了字典或列表来做索引操作,比如尝试用str['key']或者非整数索引字符串,其中更常见的是误把字符串当字典用键索引。针对你的get_injection_status函数,按以下步骤排查:
检查API响应的处理逻辑:Chaos Mesh的API返回的是JSON格式数据,如果你直接使用
response.text(字符串类型)去做['status']这样的键索引,必然触发错误。必须先把JSON字符串解析成Python字典:# 错误示例 def get_injection_status(exp_id): resp = requests.get(f"chaos-mesh-api-url/{exp_id}") return resp.text['status'] # resp.text是字符串,不能用键索引 # 正确示例 def get_injection_status(exp_id): resp = requests.get(f"chaos-mesh-api-url/{exp_id}") exp_data = resp.json() # 自动解析JSON为字典 return exp_data['status']确认函数内参数的使用方式:你说传入的参数都是字符串,但要检查函数内部是否有对参数做索引操作的代码,比如误写
exp_id['some_field']——字符串只能用整数索引,这种写法会直接报错。打印关键变量的类型和内容:在触发错误的代码行前,加入打印语句,确认变量类型是否符合预期:
print(type(your_variable)) print(your_variable)如果输出是
<class 'str'>,说明你正在对字符串做非整数索引操作,这就是问题根源。排查API返回异常:如果Chaos Mesh API返回了错误信息(比如404、500状态码对应的纯文本提示),此时
resp.text是错误字符串而非预期的JSON,后续索引操作也会报错。建议先检查响应的状态码:def get_injection_status(exp_id): resp = requests.get(f"chaos-mesh-api-url/{exp_id}") resp.raise_for_status() # 抛出HTTP错误,提前发现问题 exp_data = resp.json() return exp_data['status']
内容的提问来源于stack exchange,提问作者Mohammadreza
相关产品推荐
相关产品推荐

