影刀RPA进阶教程:字典取值的两种方案——键不存在时怎么办 影刀RPA进阶教程字典取值的两种方案——键不存在时怎么办流程跑得好好的日志突然甩出一句字典不存在 XXX 这个 key整个流程当场停摆——这是用影刀RPA做数据映射的新手几乎必撞的一堵墙。字典这东西会用的人拿来管理多店铺账号、商品信息映射、接口数据处理效率翻倍不会处理键不存在的人流程隔三差五炸一次还查不出原因。我是做电商多账号管理的字典是我用得最狠的数据类型。这篇把字典取值的两种方案讲透一种是【获取键值】指令配默认值兜底一种是【指定键是否存在】先判断再取。两种方案适用场景不同选错了照样踩坑我把选型逻辑、参数配置、真实报错案例一次说清。字典是什么一张键值对照表字典是另一种盛数据的容器代表一种映射关系外部为花括号内部以键值对键值的形式存储数据。理解字典最快的比喻是查字典本身你拿偏旁部首键去查字义值而不是像列表那样翻页码位置。# 字典的基本结构{键1:值1, 键2:值2}# 商品ID映射价格goods{10010:59.9,10020:39.9,10030:89.0}# 取值变量名[键] 的形式# goods[10020] 的结果就是 39.9数据结构怎么取值适合存什么列表按位置取第0项、第-1项一排同类数据字典按键名取键值映射关系影刀RPA的字典操作是一整套指令集新建字典、设置键值对、获取键值、删除字典键值对、合并字典、获取字典键名列表、获取字典值列表、ForEach字典循环全在指令面板搜字典就能找到。方案一获取键值默认值兜底适合缺了也能继续跑【获取键值】指令两个输入字典填字典变量键名填要取的键取到的值保存为变量。当键不存在时官方给的标准解法有两条方法一是填写正确的、字典中存在的键方法二是设置键不存在时返回一个默认值默认值可自定义。默认值方案的价值在于流程不断。我在拼多多多店铺监控里这么用它# 场景按店铺ID取该店铺的采集频率新店铺还没配置过# shop_config 字典里只有老店铺的配置# shop_config {shop001: 30, shop002: 60}# 用【获取键值】取 shop003 的频率![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/19bc8988d8e04299bd52eba9630bf895.png#pic_center)# 键名填 shop003# 键不存在时返回默认值设为 60分钟# 结果新店铺没配置也拿到默认60分钟流程继续跑默认值设多少有讲究取价格设默认0会污染后面的最低价计算设成不参与运算的哨兵值更稳取配置项设默认值等于老店铺的通用配置新店铺自动继承。默认值不是随便填个0要想清楚缺数据时业务上该走哪条路这个意识比指令本身重要。方案二先判断键是否存在适合缺了要走另一条路【指定键是否存在】指令部分版本叫字典指定键是否存在判断字典中是否存在某个指定键。输入两个参数字典填字典对象官方文档明确提示如果输入的不是字典会报类型错误键填文本。输出是布尔值True或False保存成变量后直接接If条件判断。适合的场景是键不存在时要做完全不同的事而不是给个默认值了事键存在用【获取键值】正常取值走正常采集逻辑键不存在把新店铺ID追加进待初始化列表用【设置键值对】补一条默认配置下次就有值了# 场景商品ID映射名称遇到没见过的新商品ID要单独入库# name_map {10010: 蓝牙耳机, 10020: 机械键盘}# 第一步【指定键是否存在】判断 10030 在不在# 结果存布尔变量 is_exist# 第二步If 条件判断# is_exist 为 True → 【获取键值】取出名称# is_exist 为 False → 走新增分支# 【设置键值对】往 name_map 里补 {10030: 待确认商品}# 同时【追加新文本】把 10030 记进待人工确认清单这个方案多一步判断换来的是流程的自我修补能力——字典越跑越全。我的商品映射字典就是靠这个机制从最开始手工录入的几十条跑了两周自动积累到上千条人工只处理待确认清单。两种方案怎么选一张表定生死对比项方案一默认值兜底方案二先判断再取指令数一条【获取键值】判断If取值三步键不存在时返回你设的默认值继续走走你写的另一条分支适合场景缺数据可以接受缺数据必须特殊处理典型用法配置项读取、非关键字段数据入库、需补录的场景我的实操经验临时性、读配置的取值用方案一省事写库、影响后续计算的取值用方案二保险。两个方案不互斥同一个流程里可以混着用。报错还原字典不存在XXX这个key的完整排查把这个官方报错的排查路径整理成三步遇到直接对号入座。看报错里的键名大概率是键名拼写错了多一个空格、大小写不同都算错。全角冒号和半角冒号混用也是常犯的中文输入法打出来的键和英文键:是两个东西看数据来源键是动态生成的话比如从网页抓的店铺ID先【打印日志】输出键变量确认它到底长什么样是不是带了看不见的空白字符用【删除文本两端的空格】清理后再查还是不存在就上兜底按前面讲的两个方案处理别让流程裸奔我排查过最刁钻的一次网页抓的ID末尾带了个全角空格肉眼看完全一样取值永远报键不存在。后来把键和值都打印出来对比长度才发现获取文本长度一量多了两个字符。所以动态键取值前先清理空格应该养成肌肉记忆。字典的增删改设置键值对身兼三职【设置键值对】是字典指令里的多面手用于在字典中设置一对键值若键名已存在则修改值。也就是说新增和修改是同一个指令键不存在就新增键存在就覆盖。配套的还有【删除字典键值对】按键名删除、【合并字典】把一个字典的所有键值对更新到另一个字典、【清空字典】一键清空。多字典合并时注意顺序把字典A合并进字典BA和B如果有相同的键按合并指令的方向决定谁覆盖谁重要数据合并前先打印日志确认。批量建字典别一条条拖【设置键值对】用【ForEach字典循环】反向操作或者Python模式写标准字典 {“name”:“影刀RPA”,“location”:“中国杭州”} 一次性搞定几十行指令变成一行。ForEach字典循环批量处理键值对的主力【ForEach字典循环】依次循环字典中的每一项配置时同时给出两个输出变量存储循环项键名至、存储循环项键值至。循环体里两个变量直接用这是字典遍历最顺手的形态。典型用法循环登录多个店铺账号。账号设为键名、密码设为键值循环体里把键名填进账号输入框、键值填进密码输入框一组循环配置搞定N个店铺。比维护N对单独变量清爽太多加账号只需要往字典里加一条键值对流程一行不改——这就是字典的扩展性红利。字典在数据链路里的上下游上游网页采集的数据先用【文本分割成列表】切成列表再和另一组数据配对组装成字典HTTP接口返回的JSON字符串用JSON助手解析成对象它的取值逻辑和字典同构按键取值一个思路。还有【列表项转字典键】这种指令把列表项直接变成字典的键组装映射关系更省事。下游【格式成文本】指令把字典内容按格式转成文本键-值的连接符、多个项之间的连接符都能自定义比如键值用-“连接、键值对用”连接转出来直接填进飞书通知或Excel。【获取字典键名列表】【获取字典值列表】把字典拆成两个列表喂给ForEach列表循环或写入Excel的行数据衔接自然。其他模块速览字典在整个知识体系里的位置元素定位采集列表页得到的标题列表价格列表靠字典组装成映射关系元素捕获、XPath、CSS选择器、正则四套定位手段是数据的源头流程控制If配合【指定键是否存在】做分支ForEach字典循环做批量Try-Catch兜住取值异常网页自动化等待策略、弹窗处理、翻页逻辑里的状态判断键值对存页面状态→处理动作的映射很顺手数据处理Excel读出的二维列表按某列去重后转字典做查找表比每次遍历列表快得多鼠标键盘图像坐标、图像路径这类配置集中放一个字典变量改配置只动一处进阶技能Python节点的字典和指令层互通复杂映射逻辑可以下沉到Python写系统联动飞书群通知、发送邮件的正文用【格式成文本】从字典生成模板统一工程化规范字典变量命名带_map或_config后缀一眼识别用途版本上社区版练手正式跑批考虑付费版本易错速查字典相关6个高频问题报错或现象原因解决字典不存在XXX这个key键名拼错或键确实不存在核对拼写清理空格或设默认值/先判断指定键是否存在报类型错误输入的不是字典类型检查变量确认是字典再传入取到的值是空的键存在但值本身为空补值或取值后做空值校验| 字典越跑越大内存吃紧 | 循环里不断新增键值对 | 定期清理或用完的键及时删除 || 合并后配置被覆盖 | 合并方向搞反了 | 确认哪个字典更新到哪个先打印再合并 || 动态键永远查不到 | 键带了隐藏空白字符 | 取值前用删除两端空格指令清理 |学习资源与延伸阅读字典这块建议做一个小练习把10个店铺的账号密码建成字典用ForEach字典循环打印每一对再故意取一个不存在的键把两种方案各实现一遍报错见过一次就永久免疫了。完整流程源码我放在代码仓库 home.linyan.cloud可以直接参考改造里面有键不存在双方案的完整对照流程和店铺登录的实战模板。影刀官方文档的字典处理自动化专题课有配套视频建议配合这篇一起看。#影刀RPA #RPA自动化 #字典 #键值对 #异常处理作者林焱