【发布时间】:2020-09-25 08:09:23
【问题描述】:
当我运行测试 DICT-WITH-LISTS 时,我收到一个错误,说字典没有键。但是正如您所看到的,我确实打印了键,并且其值应该是列表的键似乎就在那里。
不确定我做错了什么以及为什么我的密钥在错误消息中的显示方式不同。
我将非常感谢解决此问题的任何帮助
*** Variables ***
${p1}= P-1
${f1}= F-2
${p2}= P-2
${p3}= P-3
*** Test Cases ***
DICT-WITH-LISTS
[tags] run
${resNameList} = Create List
${laneInfoList}= Create Dictionary L0=res1 L1=res2 L2=res3 L3=res4 L4=res5
${lane2resNameMappingList}= Create List
log to console LANE ID LIST : ${laneInfoList.keys()}
:FOR ${laneID} IN @{laneInfoList.keys()}
\ Append To List ${resNameList} ${laneInfoList['${laneID}']}
\ ${lane2resName}= Create dictionary lane=${laneID} resName=${laneInfoList['${laneID}']}
\ Append To List ${lane2resNameMappingList} ${lane2resName}
${resName2resObjMappingList}= Create Dictionary
@{resNameList}= Remove Duplicates ${resNameList}
log to console res LIST: @{resNameList}
${totalres}= Get length ${resNameList}
: FOR ${index} IN RANGE 0 ${totalres}
\ log to console INDEX:${index} res:${resNameList}[${index}] AFMObj:afm${index}
\ set to dictionary ${resName2resObjMappingList} ${resNameList}[${index}]=afm${index}
log to console lane2resNameMappingList: ${lane2resNameMappingList}
log to console resName2resObjMappingList: ${resName2resObjMappingList}
set global variable ${lane2resNameMappingList}
set global variable ${resName2resObjMappingList}
${totalObjList}= create list ${p1} ${f1} ${p2} ${p3}
${totalObjsInTest}= Get length ${totalObjList}
${totalLanesAvailable}= Get length ${lane2resNameMappingList}
${totalObjs} = Set Variable IF ${totalObjsInTest} > ${totalLanesAvailable} ${totalLanesAvailable} ${totalObjsInTest}
${object2resMappingList}= Create Dictionary
${resList} = Create List
log to console Attaching res for a total of ${totalObjs} objects based on current availability!
: FOR ${index} IN RANGE 0 ${totalObjs}
\ log to console Obj:${totalObjList}[${index}]
\ log to console res: ${lane2resNameMappingList[${index}]['resName']}
\ log to console res Obj:${resName2resObjMappingList['${lane2resNameMappingList[${index}]['resName']}']}
\ log to console Lane:${lane2resNameMappingList[${index}]['lane']}
\ log to console BW:${lane2resNameMappingList[${index}]['lane']}
\ ${isKeyPresent}= Run Keyword And Return Status Dictionary Should Contain Key ${object2resMappingList} ${totalObjList}[${index}]
\ log to console KEY:${isKeyPresent}
\ Run Keyword Unless ${isKeyPresent} set to dictionary ${object2resMappingList} ${totalObjList}[${index}]=${resList}
\ log to console AFTER:object2resMappingList: ${object2resMappingList}
\ log to console OBJ:${totalObjList}[${index}] VALUE:${resName2resObjMappingList['${lane2resNameMappingList[${index}]['resName']}']}
\ log to console DICT : ${object2resMappingList.keys()}
\ log to console DICT : &{object2resMappingList} KEY:${totalObjList}[${index}]
\ Run Keyword Append To List &{object2resMappingList}[${totalObjList}[${index}]] ${resName2resObjMappingList['${lane2resNameMappingList[${index}]['resName']}']}
\ ${resList} = Create List
log to console object2resMappingList: ${object2resMappingList}
输出
DICT-WITH-LISTS ...车道 ID 列表:odict_keys(['L0', 'L1', 'L2', 'L3', 'L4'])
....res LIST: ['res1', 'res2', 'res3', 'res4', 'res5']
DICT-WITH-LISTS .INDEX:0 res:res1 AFMObj:afm0
INDEX:1 res:res2 AFMObj:afm1
索引:2 res:res3 AFMObj:afm2
INDEX:3 res:res4 AFMObj:afm3
索引:4 res:res5 AFMObj:afm4
.lane2resNameMappingList: [{'lane': 'L0', 'resName': 'res1'}, {'lane': 'L1', 'resName': 'res2'}, {'lane': 'L2', ' resName':'res3'},{'lane':'L3','resName':'res4'},{'lane':'L4','resName':'res5'}]
.resName2resObjMappingList: {'res1': 'afm0', 'res2': 'afm1', 'res3': 'afm2', 'res4': 'afm3', 'res5': 'afm4'}
DICT-WITH-LISTS ....根据当前可用性为总共 4 个对象附加资源!
.Obj:P-1
资源:资源1
res 对象:afm0
车道:L0
体重:L0
关键:假
之后:object2resMappingList:{'P-1':[]}
对象:P-1 值:afm0
DICT : odict_keys(['P-1'])
DICT : {'P-1': []} KEY:P-1
带列表的字典 |失败 |
字典 '&{object2resMappingList}' 没有键 '['P-1', 'F-2', 'P-2', 'P-3'][0'。
测试 |失败 |
1 次关键测试,0 次通过,1 次失败
共 1 次测试,0 次通过,1 次失败
【问题讨论】:
-
SO中有“minimal reproducible example”这个概念,不是code review系统;下次请把代码限制在它的相关部分。
-
我想深入了解我是如何使用字典和列表的。但我会记住将提供的代码保持在最低限度。谢谢
标签: list dictionary append robotframework