Python从嵌套字典向函数传值时遇TypeError错误求助
问题分析与解决思路
错误根源
你遇到的TypeError: string indices must be integers,本质是循环中的value是字符串类型,却被当成字典来用value['client_id']取值。原因有两个:
- config.py的mydict结构不符预期:你定义的mydict是单个租户的信息字典,但代码里把它当成了「键为租户名、值为租户信息字典」的嵌套字典来迭代。
- 多余的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
相关产品推荐
相关产品推荐

