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

Python中出现TypeError: string indices must be integers错误求助

解决ThousandEyes API调用中的TypeError: string indices must be integers错误

这个错误很常见,本质是你尝试把字符串当成字典来用了——比如你可能写了类似response['some_key']的代码,但此时response还是API返回的原始JSON字符串,不是Python字典,所以会触发"字符串索引必须是整数"的报错。

结合你的代码,我整理了两种修复方案,推荐用更简洁的requests库,也可以修复你原本的urllib2代码:

方案一:用requests库(推荐,代码更简洁)

requests会帮你处理很多细节,比如认证、代理和JSON解析,减少出错概率:

import requests
import sys

# 代理配置
proxies = {
    'https': 'http://proxy.wdf.sap.corp:8080'
}

# API认证信息
username = 'xxx@xxx.com'
password = 'xxxxxxxxxxxxxxxxxxx'  # 你的API令牌/密码
THOUSANDEYES_API_URL = 'https://api.thousandeyes.com/v6/usage.json'

try:
    # 发送带认证和代理的GET请求
    response = requests.get(THOUSANDEYES_API_URL, auth=(username, password), proxies=proxies)
    # 检查请求是否成功(如果HTTP状态码是4xx/5xx会抛出异常)
    response.raise_for_status()
    
    # 关键步骤:把响应解析为Python字典
    data = response.json()
    
    # 现在可以正常通过键访问数据了
    print("获取到的使用数据:", data['usage'])
except requests.exceptions.RequestException as e:
    print(f"请求过程出错: {str(e)}")
    sys.exit(1)

方案二:修复你的urllib2代码

如果一定要用urllib2,需要补全认证头和JSON解析的步骤:

import urllib2
import base64
import json
import sys

# 代理设置
proxy = urllib2.ProxyHandler({'https': 'http://proxy.wdf.sap.corp:8080'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)

username = 'xxx@xxx.com'
password = 'xxxxxxxxxxxxxxxxxxx'
THOUSANDEYES_API_URL = 'https://api.thousandeyes.com/v6/usage.json'

# 构建Basic认证的请求头
auth_str = base64.b64encode(f"{username}:{password}".encode('utf-8')).decode('utf-8')
headers = {'Authorization': f'Basic {auth_str}'}

try:
    request = urllib2.Request(THOUSANDEYES_API_URL, headers=headers)
    response = urllib2.urlopen(request)
    
    # 读取响应内容并解析为JSON字典(这步是解决错误的核心)
    raw_response = response.read().decode('utf-8')
    data = json.loads(raw_response)
    
    # 正常访问字典数据
    print("获取到的使用数据:", data['usage'])
except urllib2.URLError as e:
    print(f"请求出错: {str(e)}")
    sys.exit(1)
except ValueError as e:
    print(f"JSON解析失败: {str(e)}")
    sys.exit(1)

关键修复点说明

  1. 必须解析JSON响应:API返回的是纯文本格式的JSON字符串,必须用json.loads()(urllib2)或response.json()(requests)转换成Python字典,之后才能用键索引(比如data['usage'])访问内容,否则直接操作字符串就会触发你遇到的错误。
  2. 认证头的正确配置:ThousandEyes API需要Basic认证,urllib2需要手动构建Base64编码的认证头,而requests可以直接通过auth参数自动处理。
  3. 避免混合库使用:你的代码里同时导入了requests和urllib2,但只用到了urllib2,建议统一用一个库,减少逻辑混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:11:56