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

Python3 TypeError求助:列表索引需为整数/切片而非字符串的问题解决

解决TypeError: list indices must be integers or slices, not str的问题

咱们先理清楚你遇到的问题:你错误地把列表server_list当成字典来使用字符串索引了,这就是触发TypeError的核心原因。

错误根源

你的server_list是由多个独立字典组成的列表,每个元素都是一个只有单个键的字典:

server_list = [
    {'mydev': ['192.168.56.102', ...]},
    {'mydev2': ['192.168.56.102', ...]}
]

列表只能用整数或切片来定位元素(比如server_list[0]取第一个字典),而你试图用字符串selected_env直接索引列表,自然会报错。

正确的列表推导式写法

我们需要遍历列表中的每个字典,检查字典是否包含目标键selected_env,如果包含就提取对应的值:

selected_env = 'mydev2'
server_list = [
    {'mydev': ['192.168.56.102', '192.168.56.102', '192.168.56.102']},
    {'mydev2': ['192.168.56.102', '192.168.56.102', '192.168.56.102']}
]

# 列表推导式:遍历每个字典,筛选出包含目标键的项并提取值
selected_servers = [env_dict[selected_env] for env_dict in server_list if selected_env in env_dict]

# 如果确定只有一个匹配的环境,可以直接取出结果(避免嵌套列表)
if selected_servers:
    target_servers = selected_servers[0]
    print(target_servers)  # 输出: ['192.168.56.102', '192.168.56.102', '192.168.56.102']

更优的数据结构建议

如果可以调整数据结构,把server_list改成一个单一字典会更高效,后续取值无需遍历:

# 优化后的字典结构,直接用环境名作为键
server_dict = {
    'mydev': ['192.168.56.102', '192.168.56.102', '192.168.56.102'],
    'mydev2': ['192.168.56.102', '192.168.56.102', '192.168.56.102']
}

# 直接用get方法取值,还能避免键不存在时报错
target_servers = server_dict.get(selected_env, [])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:47:34