FastAPI报错TypeError: string indices must be integers,请求排查原因
问题排查与解决
你的报错核心是:TypeError: string indices must be integers——这说明你试图用字符串索引(["url"])访问一个字符串类型的变量,而非预期中的字典。
根本原因
遍历 house["multimedia"]["imagem"] 时,其中某个/某些 imagem 元素不是带url键的字典,而是纯字符串。比如你的数据源里可能存在这种结构:
# 某条house数据的multimedia字段示例 { "multimedia": { "imagem": [ {"url": "valid_image.jpg"}, # 正常字典格式 "invalid_image_string" # 纯字符串,无url键 ] } }
你说直接返回imagem["url"]没问题,大概率是测试时只取了imagem为字典的单条数据,没覆盖到混入字符串的情况。
修复方案
方案1:添加类型校验,兼容异常数据
遍历过程中先判断imagem的类型,只处理字典格式的元素:
@app.get("/") async def read_root(): houses = [] for house in load: url = None # 遍历imagem列表,取第一个有效url for imagem in house["multimedia"]["imagem"]: if isinstance(imagem, dict) and "url" in imagem: url = imagem["url"] break # 确保有有效url再添加到结果 if url: houses.append({ "id": house["id"], "titulo": house["titulo"], "preco": house["precoweb"], "url": url }) return houses
方案2:排查数据源(推荐)
如果业务逻辑要求所有imagem都必须是带url的字典,那需要检查load数据的生成/获取逻辑,找出为什么会混入字符串格式的元素,从源头修复数据问题。
快速定位问题的小技巧
可以在代码里临时添加打印,输出出错时的具体数据:
for imagem in house["multimedia"]["imagem"]: print(f"当前house id: {house['id']},imagem类型: {type(imagem)},值: {imagem}") try: url = imagem["url"] except TypeError: print(f"触发错误的imagem内容: {imagem}") raise
内容的提问来源于stack exchange,提问作者Paulo Alves
相关产品推荐
相关产品推荐

