Robot Framework字典仅更新最后一次迭代值问题求助
Robot Framework 字典赋值问题:所有子字典
card_head值相同 我是Robot Framework新手,编写了gtx关键字,代码如下:
gtx [Arguments] @{crdnvlslst_params_args} ${dictx} Create Dictionary ${dictx_card_vals} Create Dictionary ${lenofcard}= Get Length ${crdnvlslst_params_args} FOR ${element} IN @{crdnvlslst_params_args} ${card} ${cardtext}= Evaluate "${element}".split("=") FOR ${x} IN RANGE 1 ${lenofcard}+${1} ${card_vals} Set Variable ${x} Set To Dictionary ${dictx_card_vals} card_head=${card_vals} card_val=${EMPTY} END Set To Dictionary ${dictx} ${card} ${dictx_card_vals} Log To Console ${dictx} END
实际输出:
{'C1': {'card_head': 4, 'card_val': ''}, 'C2': {'card_head': 4, 'card_val': ''}, 'C5': {'card_head': 4, 'card_val': ''}, 'C6': {'card_head': 4, 'card_val': ''}}
期望输出:
{'C1': {'card_head': 1, 'card_val': ''}, 'C2': {'card_head': 2, 'card_val': ''}, 'C5': {'card_head': 3, 'card_val': ''}, 'C6': {'card_head': 4, 'card_val': ''}}
尝试过用临时字典存储更新但没解决,求帮助。
问题原因
- 冗余内层循环覆盖值:每个外层循环里嵌套的FOR循环会遍历1到总参数长度的所有值,导致当前元素的
card_head被最终覆盖为总长度值(比如总长度是4时,最后x的值为4)。 - 字典引用复用:
${dictx_card_vals}在循环外创建,每次修改都是操作同一个字典对象,外层${dictx}的所有条目都指向这个字典,最终所有子字典都会显示最后一次修改的结果。
修正后的代码
gtx [Arguments] @{crdnvlslst_params_args} ${dictx} Create Dictionary ${index} Set Variable 1 FOR ${element} IN @{crdnvlslst_params_args} ${card} ${cardtext}= Evaluate "${element}".split("=") # 每次循环创建新的子字典,避免引用复用 ${dictx_card_vals} Create Dictionary card_head=${index} card_val=${EMPTY} Set To Dictionary ${dictx} ${card} ${dictx_card_vals} # 序号自增 ${index} Evaluate ${index} + 1 Log To Console ${dictx} END
改动说明
- 移除冗余的内层FOR循环,用
${index}变量记录当前元素的序号,每次循环后自增,直接赋值给card_head。 - 将子字典
${dictx_card_vals}的创建移到外层循环内部,确保每个主字典条目对应独立的子字典对象。 - 简化子字典初始化,直接在
Create Dictionary时设置键值对,减少不必要的步骤。
内容的提问来源于stack exchange,提问作者Automation Guy
相关产品推荐
相关产品推荐

