ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

影刀RPA进阶教程:字典取值的两种方案——键不存在时怎么办

影刀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条件判断。

适合的场景是"键不存在时要做完全不同的事",而不是给个默认值了事:

  1. 键存在:用【获取键值】正常取值,走正常采集逻辑
  2. 键不存在:把新店铺ID追加进待初始化列表,用【设置键值对】补一条默认配置,下次就有值了
# 场景:商品ID映射名称,遇到没见过的新商品ID要单独入库# name_map = {"10010": "蓝牙耳机", "10020": "机械键盘"}# 第一步:【指定键是否存在】判断 "10030" 在不在# 结果存布尔变量 is_exist# 第二步:If 条件判断# is_exist 为 True → 【获取键值】取出名称# is_exist 为 False → 走新增分支:# 【设置键值对】往 name_map 里补 {"10030": "待确认商品"}# 同时【追加新文本】把 "10030" 记进待人工确认清单

这个方案多一步判断,换来的是流程的"自我修补"能力——字典越跑越全。我的商品映射字典就是靠这个机制,从最开始手工录入的几十条,跑了两周自动积累到上千条,人工只处理待确认清单。

两种方案怎么选:一张表定生死

对比项方案一:默认值兜底方案二:先判断再取
指令数一条【获取键值】判断+If+取值,三步
键不存在时返回你设的默认值,继续走走你写的另一条分支
适合场景缺数据可以接受缺数据必须特殊处理
典型用法配置项读取、非关键字段数据入库、需补录的场景

我的实操经验:临时性、读配置的取值用方案一,省事;写库、影响后续计算的取值用方案二,保险。两个方案不互斥,同一个流程里可以混着用。

报错还原:字典不存在XXX这个key的完整排查

把这个官方报错的排查路径整理成三步,遇到直接对号入座。

  1. 看报错里的键名:大概率是键名拼写错了,多一个空格、大小写不同都算错。全角冒号和半角冒号混用也是常犯的,中文输入法打出来的"键:"和英文"键:"是两个东西
  2. 看数据来源:键是动态生成的话(比如从网页抓的店铺ID),先【打印日志】输出键变量,确认它到底长什么样,是不是带了看不见的空白字符,用【删除文本两端的空格】清理后再查
  3. 还是不存在就上兜底:按前面讲的两个方案处理,别让流程裸奔

我排查过最刁钻的一次:网页抓的ID末尾带了个全角空格,肉眼看完全一样,取值永远报键不存在。后来把键和值都打印出来对比长度才发现,获取文本长度一量,多了两个字符。所以动态键取值前先清理空格,应该养成肌肉记忆。

字典的增删改:设置键值对身兼三职

【设置键值对】是字典指令里的多面手:用于在字典中设置一对键值,若键名已存在则修改值。也就是说新增和修改是同一个指令,键不存在就新增,键存在就覆盖。

配套的还有【删除字典键值对】按键名删除、【合并字典】把一个字典的所有键值对更新到另一个字典、【清空字典】一键清空。多字典合并时注意顺序:把字典A合并进字典B,A和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自动化 #字典 #键值对 #异常处理

作者:林焱

返回列表