You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:45:36