ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

影刀RPA报错排查手册:IndentationError与语法类报错的快速修复

影刀RPA报错排查手册:IndentationError与语法类报错的快速修复 影刀RPA报错排查手册IndentationError与语法类报错的快速修复流程一启动就弹出 IndentationError整个流程一条指令都没跑——这是影刀RPA里最让人摸不着头脑的报错之一因为界面上明明每条指令都好好的看不出任何问题。我第一次遇到的时候对着两百条指令从上往下翻了三遍最后发现是循环少了一个【循环结束】前后折腾了半个多小时。IndentationError 直译是缩进错误影刀RPA底层用Python执行你拖进去的每一条指令最终都会翻译成Python代码。翻译出来的代码缺了缩进块Python就直接拒绝运行所以这类报错的特点是流程根本没开始跑报错在启动瞬间就出现。好在这类报错的原因高度集中官方文档里就明确列了三种成因按下面顺序排查基本三分钟内定位。先搞清楚为什么指令也会报缩进错误认识影刀RPA的执行机制后你就不会慌了。影刀的界面是拖拽式的但底层是Python解释器在跑。像【循环相似元素】、【IF条件】、【Try】这类指令翻译成Python时就是 for、if、try 这种带缩进块的语法结构。所以缺【循环结束】翻译出来就是一个只有 for 头没有循环体的残缺结构Python看到 expected an indented block 就罢工了。影刀界面概念对应Python结构缺少配对报什么【循环结束】for/while 的循环体IndentationError【End If】if 的分支体IndentationError【End Try】try 的异常块IndentationError搞清楚这个对应关系排查方向就非常明确了去找所有有头没有尾的指令块。三步定位IndentationError的快速修复流程官方文档给出的三种成因我按排查频率排序用了循环但缺【循环结束】检查【循环相似元素】、【For次数循环】、【ForEach列表循环】、【While条件循环】看每一条是不是都有对应的【循环结束】指令用了条件判断但缺【End If】检查【IF条件】、【IF网页包含】、【IF元素存在】、【IF图像存在】等结尾必须有【End If】用了Try但缺【Catch】或【End Try】异常处理块必须完整【Try】后面至少要接【Catch】最后以【End Try】收尾排查有个偷懒技巧直接在流程编排区把流程折叠展开一遍肉眼从上往下扫凡是开始类指令下面层级突然断掉的基本就是漏了配对指令。还有一个更隐蔽的变体指令其实加了但是位置放错了。比如【循环结束】被拖到了【IF条件】的外面而不是循环的里面结构嵌套对不上照样报缩进错误。这种情况要对照设计意图把整个块的层级捋一遍。改完之后不要直接跑全量流程先单步执行或点局部运行确认结构完整再放开跑。语法类报错速查从报错文本反推问题IndentationError 只是语法类报错的一个我把踩过的几类整理成表见到报错关键词直接对号入座报错关键词出现环节根因修复expected an indented block启动瞬间缺循环结束/End If/End Try补配对指令argument of type ‘’ is not iterable运行到IF条件对None或数字做了包含判断见下节NameError: name ‘xxx’ is not definedPython节点变量名拼错或没初始化检查变量面板invalid syntaxPython节点Python代码里中文标点混入换成英文标点重点说两个我踩过的。第一个是Python节点里的中文标点。我写过一个取值的Python片段冒号用了中文的影刀RPA直接报 invalid syntax。非技术出身的人手滑打出中文标点太常见了检查方法很简单把代码贴到记事本肉眼扫一遍引号、冒号、括号是不是全英文。第二个是变量名大小写。影刀RPA的变量名区分大小写变量面板里叫 OrderList指令里写成 orderlist 就报 NameError。我的习惯是变量名全用小写加下划线从源头消灭这类问题。TypeError与None值包含判断的三个类型坑这个报错不算启动期语法错但排查逻辑一脉相承都是类型不符合语法要求。报错原文是 TypeError: argument of type ‘’ is not iterable出现在【IF条件】或【IF多条件】里做包含判断的时候。官方文档写得很清楚能做包含判断的对象类型是字符串、列表、元组、集合、字典整数、小数、布尔不行。常见三种踩法对象1是None值比如从文本中提取信息的指令没提取到东西输出了None后面拿它去判断是否包含某关键词就炸了。修法是用【IF多条件】加上不为空的前置判断先确认不是None再做包含用错了判断指令想判断页面上有没有618大促这段文字应该用【IF网页包含】而不是把网页文本赋值给变量再做字符串判断对象1和对象2类型不匹配判断前先想清楚两边分别是什么类型拿不准就在前面加一条输出日志把变量类型打出来看这段排查逻辑我写成了一个Python片段的等价示意方便理解判断顺序# 场景从页面文本中提取促销关键词后做包含判断# 输入page_text 为获取到的页面文本变量# 输出result 为判断结果result不包含# 第一步先判断变量是否为NoneNone做包含判断会直接TypeErrorifpage_textisnotNone:# 第二步确认是字符串类型再去做包含判断if618大促inpage_text:result包含# 输出 result 给后续流程使用对应到影刀RPA界面就是用【IF多条件】把变量不为空放在包含判断前面两个条件同时满足才走主分支。语法错误却不是代码错数据里的坑还有一种最冤的报错报错像语法问题根因却在数据上。我踩过的真实案例是CSV数据导入SQL Server数据库批量写入时报语法错误检查了半天SQL语句没毛病。最后发现是编码问题用 GB2312 编码格式导入时遇到生僻字就会报语法类错误。官方给的解法是把导入编码指定为 GBK编码代码936因为GBK是GB2312的扩充收录了更多生僻字换过去立刻就通了。这件事给我的教训是语法类报错的排查范围不要只盯着指令和代码数据的形状和编码同样会制造假语法错。遇到怎么改指令都修不好的语法报错试试把出问题的那条数据单独拿出来看一眼。配套模块提醒语法报错背后的12个模块语法报错本身不复杂但它和12大核心模块都有交集快速过一遍。安装与环境装完影刀RPA务必装浏览器插件插件异常会引起大量假定位错误别和语法错混为一谈。元素定位XPath和CSS选择器写错会在校验时报错XPath擅长层级和文本匹配CSS擅长类名属性筛选两者并列掌握定位失败先在浏览器F12里验证一遍表达式。变量类型IF判断炸Type错误大多源于类型混乱取字典不存在的键用get方案给默认值。流程控制本文主场的IndentationError就出在这配对指令记牢。网页自动化翻页判断元素class里的disabled、懒加载滚动判断这些条件表达式写错也是常客。数据处理CSV编码、Excel日期偏移这类报错长得像语法错实际是数据格式问题。鼠标键盘图像IF图像存在同样要配【End If】。进阶技能Python节点的代码自己负责语法正确影刀不帮你检查。平台实战拼多多、淘宝的页面文本里混着全角字符做文本判断前先统一格式。系统联动飞书通知里嵌入报错文本时注意转义。工程化规范子流程拆分后报错定位先跑主流程再加断点进子流程右键指令加断点一行行看。易错速查语法类报错6条速判启动瞬间报 IndentationError九成是缺【循环结束】、【End If】或【End Try】从上往下扫配对指令补了配对指令还报错检查配对指令的层级位置是否嵌套正确别放错块IF条件报 not iterable对None做了包含判断用【IF多条件】先加不为空判断或改用【IF网页包含】Python节点报 invalid syntax检查中文标点混入引号冒号括号全部换英文报 NameError 未定义变量名拼写或大小写不一致对照变量面板逐字核对SQL写入报语法错但语句没错数据编码问题GB2312生僻字炸错改用GBK编码936学习资源与延伸阅读语法类报错看着吓人其实是所有报错里修得最快的一类因为报错位置就在启动瞬间或明确的一行。我把配对指令自查表、IF多条件的None前置判断流程、GBK编码写入的完整流程源码都放在代码仓库 home.linyan.cloud可以直接参考改造到自己的流程里。#影刀RPA #RPA自动化 #报错排查 #调试技巧 #流程设计作者林焱
返回列表