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

Python从嵌套字典向函数传值时遇TypeError错误求助

问题分析与解决思路

错误根源

你遇到的TypeError: string indices must be integers,本质是循环中的value是字符串类型,却被当成字典来用value['client_id']取值。原因有两个:

  1. config.py的mydict结构不符预期:你定义的mydict是单个租户的信息字典,但代码里把它当成了「键为租户名、值为租户信息字典」的嵌套字典来迭代。
  2. 多余的json.loads调用:如果config.mydict已经是Python字典(如你给出的代码),json.loads(config.mydict)会直接报错,因为json.loads只接受字符串输入。

针对不同需求的解决方法

需求1:只需要处理这一个租户

直接跳过循环,从mydict中提取对应值传给myfunc:

def main():
    # 直接使用config.mydict,不需要json.loads
    tenant_info = config.mydict
    # 注意config里的键是'cleint_secret'(拼写错误,少了字母i),要和myfunc里的CLIENT_SECRET对应
    myfunc(tenant_info['tenant'], tenant_info['client_id'], tenant_info['cleint_secret'])

额外提示:建议把config里的cleint_secret改成正确的client_secret,避免后续因拼写错误导致键不存在的问题。

需求2:需要处理多个租户

先修改config.py里的mydict结构,改成嵌套字典(键为租户标识,值为对应租户的信息字典):

# config.py中的mydict修改为:
mydict = {
    'tenant_abcd': {
        'client_id': 'customerid',
        'client_secret': 'password'
    },
    'tenant_efgh': {
        'client_id': 'another_customerid',
        'client_secret': 'another_password'
    }
}

然后修改main函数,直接迭代这个嵌套字典:

def main():
    tenants = config.mydict  # 无需json.loads
    for tenant_name, tenant_info in tenants.items():
        myfunc(tenant_name, tenant_info['client_id'], tenant_info['client_secret'])

这样循环中的tenant_info就是字典类型,就能正常用['client_id']取值了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:48:23