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

如何解决Streamlit应用调用API时的TypeError: string indices must be integers错误

问题解决思路与方案

核心原因分析

直接调用函数正常,但Streamlit按钮触发时出现TypeError: string indices must be integers,说明**result变量在按钮触发时是字符串类型,而非预期的字典**。大概率是API响应解析环节出错,或Streamlit运行环境下的状态/缓存导致数据类型异常。

具体解决步骤

1. 确保API响应正确解析为字典

检查getFundamentalAnalysis函数中API请求的处理逻辑,必须使用.json()方法将JSON格式的响应转为字典,而非直接使用.text(返回字符串):

import requests

def getFundamentalAnalysis(company_id):
    # 错误写法:返回字符串
    # result = requests.get(f"your_api_url/{company_id}").text
    
    # 正确写法:解析为字典
    response = requests.get(f"your_api_url/{company_id}")
    result = response.json()  # 关键:将JSON响应转为Python字典
    return result['data']['summary'][0]

2. 添加调试与异常捕获

在函数中加入打印与错误处理,明确result的类型和API返回状态:

def getFundamentalAnalysis(company_id):
    try:
        response = requests.get(f"your_api_url/{company_id}")
        response.raise_for_status()  # 捕获4xx/5xx HTTP错误
        result = response.json()
        print(f"Result type: {type(result)}, content: {result}")  # 终端查看调试信息
        return result['data']['summary'][0]
    except requests.exceptions.RequestException as e:
        print(f"API请求错误: {e}")
        return None
    except KeyError as e:
        print(f"数据结构异常,缺失键: {e}")
        return None

3. 检查Streamlit缓存(若使用)

如果函数加了@st.cache_data或@st.cache_resource装饰器,可能因缓存序列化问题导致字典被转为字符串。可以:

  • 清除Streamlit缓存(终端按C键)
  • 调整缓存参数,确保返回的字典能正确序列化:
import streamlit as st

@st.cache_data(show_spinner=False)
def getFundamentalAnalysis(company_id):
    # 函数逻辑不变

4. Streamlit按钮回调的容错处理

在按钮触发逻辑中,处理函数返回的空值,避免前端报错:

import streamlit as st

company_id = st.text_input("输入企业ID")
if st.button("Get Data"):
    if company_id:
        data = getFundamentalAnalysis(company_id)
        if data:
            st.write("查询结果:")
            st.json(data)  # 用st.json更友好展示字典数据
        else:
            st.error("数据获取失败,请检查企业ID或API状态")
    else:
        st.warning("请先输入企业ID")

验证方法

点击按钮后查看终端输出的调试信息:

  • 如果Result type是<class 'dict'>,说明解析正常,需检查数据结构是否与预期一致(比如['data']['summary']是否存在且是列表)
  • 如果Result type是<class 'str'>,说明API返回的不是合法JSON(比如错误页面),需检查API请求参数或接口状态

内容的提问来源于stack exchange,提问作者Vlogs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:07:50