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

本地正常的Flask代码部署PythonAnywhere后出现TypeError错误求助

问题原因与解决方案

核心结论:代码存在异常处理缺陷,与依赖库无关

出现TypeError: string indices must be integers的直接原因是:你遍历的data并非预期的JSON数组,而是字符串。当for i in data遍历字符串时,i会变成单个字符,自然无法用字典索引i["market_cap_rank"]。

本地测试正常但部署到PythonAnywhere后出错,是因为服务器环境下请求CoinGecko API时可能遇到限制:

  • 服务器IP被反爬机制拦截,返回错误文本/HTML页面而非预期JSON
  • API请求超时或返回非200状态码的异常内容

你的代码直接假设API请求必然成功且返回正确格式,未做任何异常处理,这是代码本身的缺陷。

修复步骤

1. 校验API请求状态

在解析响应前,先确认请求是否成功:

response = requests.get(url)
# 非200状态码直接抛出异常
response.raise_for_status()

2. 捕获JSON解析错误

即使状态码正常,也可能返回非JSON内容,需添加解析异常处理:

try:
    data = json.loads(response.text)
except json.JSONDecodeError:
    return render_template("error.html", message="加密货币数据获取失败")

3. 验证数据类型

确保data是预期的列表类型后再遍历:

if not isinstance(data, list):
    return render_template("error.html", message="数据格式异常")

4. 可选:添加请求头规避反爬

给请求添加浏览器标识,降低被拦截概率:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=headers)

关于依赖的说明

当前错误与依赖库无关——如果缺失requests,会触发ImportError而非TypeError。只需确保PythonAnywhere环境中已安装requests(通过虚拟环境执行pip install requests即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:12:42