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

Python函数单独运行正常但测试报错:TypeError问题排查求助

问题排查与解决

错误根源

测试传入的content_data被额外包裹了一层双引号,导致json.loads(content_data)解析后得到的不是预期的字典,而是普通字符串。

看测试数据:

content_data = '"{\n    \\"page\\": {\n        \\"layouts\\": []\n    },\n    \\"reusableBlocks\\": 0,\n    \\"layouts\\": {},\n    \\"columns\\": {},\n    \\"components\\": {}\n}"'

外层双引号让整个JSON对象变成了一个字符串值,解析后content是字符串类型而非字典。此时'layouts' in content会被当成检查字符串中是否包含子串'layouts',后续调用content['layouts'].values()自然触发TypeError——字符串的索引只能是整数。

解决方案

1. 修复测试数据

去掉content_data外层的双引号,让它成为合法的JSON对象字符串:

content_data = '{\n    "page": {\n        "layouts": []\n    },\n    "reusableBlocks": 0,\n    "layouts": {},\n    "columns": {},\n    "components": {}\n}'

2. 增强函数健壮性

在函数中增加类型校验,避免非法输入导致报错:

import json

def update_content_if_reusable(content_data):
    """ Add reusable counter """
    content = json.loads(content_data)
    # 确保content是字典类型
    if not isinstance(content, dict):
        return json.dumps(content, indent=4)
    
    # 确保layouts是字典类型,再遍历
    if 'layouts' in content and isinstance(content['layouts'], dict):
        for layout in content['layouts'].values():
            # 确保layout是字典且包含isReusable字段
            if isinstance(layout, dict) and layout.get('isReusable'):
                # 确保reusableBlocks存在且为整数
                if 'reusableBlocks' in content and isinstance(content['reusableBlocks'], int):
                    content['reusableBlocks'] += 1
    
    return json.dumps(content, indent=4)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:03:30