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

如何解决Robot框架中TypeError: string indices must be integers, not 'str'错误

问题解答

1. 为何Python单元测试正常但Robot执行失败?

核心原因是Robot Framework与Python原生环境的参数传递规则存在差异:

  • Python单元测试中,你直接传递的是原生字典/列表等数据结构,函数可以正常按索引访问;
  • 但Robot调用Python函数时,参数可能被隐式转换为字符串(比如你在RF里写的字典是字符串格式的"{'key': 'val'}",而非用Create Dictionary生成的实际字典对象),或者RF对容器类型的序列化处理导致函数收到的是字符串而非预期的结构,此时用字符串索引(比如data['vip0'])就会触发TypeError。

另外,RF的变量解析机制可能会把你以为的容器变量转成字符串,比如未正确使用RF的容器关键字创建变量,导致参数传递时类型不符。

2. 如何修复该错误?

步骤1:定位参数实际类型

在Python函数verify_vip0_twd_volume开头添加打印语句,确认Robot传递过来的参数类型与内容:

def verify_vip0_twd_volume(data):
    print(f"Received data type: {type(data)}, content: {repr(data)}")
    # 原函数逻辑

运行Robot测试后,查看控制台输出,就能明确参数是字符串还是预期的字典/列表。

步骤2:统一参数类型处理

如果确认参数是JSON格式的字符串,在函数中添加反序列化逻辑:

import json

def verify_vip0_twd_volume(data):
    # 处理字符串转字典/列表
    if isinstance(data, str):
        try:
            data = json.loads(data.replace("'", "\""))  # 兼容RF里用单引号的字符串字典
        except json.JSONDecodeError as e:
            raise ValueError(f"Invalid data format: {e}")
    # 原函数逻辑,比如访问data['vip0']

步骤3:规范Robot侧的参数传递

在robot_test_keywords.robot中,使用RF原生关键字创建容器类型参数,而非直接写字符串:

*** Keywords ***
Verify VIP0 TWD Volume
    # 创建实际字典对象
    ${vip_data}=    Create Dictionary    vip0=500
    # 调用Python函数时传递该字典
    ${result}=    Run Keyword    verify_vip0_twd_volume    ${vip_data}

步骤4:验证修复效果

修改后重新运行Robot测试,若参数类型正确,函数就能正常执行,不会再触发索引错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:25:12