文档备案控制台
免费开始使用

影刀RPA避坑指南:try-catch-finally异常处理完整用法与常见误区

流程跑着跑着突然崩了,弹出一个红色报错框——这是新手最怕的事。其实大部分崩溃都可以提前兜住,让流程继续跑,而不是直接死掉。

影刀提供了try-catch-finally机制,专门用来“试一下,不行就换个方式处理,最后无论如何都收个尾”。我也是用了半年才完全搞懂三个块的关系,这里把踩过的坑一次说清。

一、try-catch-finally 三块各司其职

在右侧指令面板搜索“异常捕获(Try-Catch) ”,拖入流程后会自动生成三个区块。

作用是否必须什么情况执行
Try放可能出错的指令✅ 必须正常执行
Catch出错后执行的补救代码可选Try里任何指令报错时
Finally无论对错都执行的收尾代码可选Try或Catch执行完后

picture.image

语法结构长这样:

Try:

    # 可能报错的指令,比如点击一个可能不存在的按钮
Catch:
    # 出错后记录日志、换另一种方式操作
Finally:
    # 关闭弹窗、清理缓存等(不管成不成功都要做)

二、Try块:只放“可能失败”的指令

适合放Try的指令

  • 点击元素:元素可能不存在
  • 获取元素文本:元素可能加载慢
  • 打开网页:网络可能超时
  • 模拟输入:输入框可能被禁用

不适合放Try的指令

  • 变量赋值(变量 = 1不会失败)
  • 输出日志(不会失败)
  • 循环控制(跳出循环等)

原则:只有可能产生异常的指令才放Try。放太多无关指令会让Catch块难以定位真正的问题

实操:捕获一个可能不存在的弹窗

Try:

![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/1c6046d5d77b4e3a8cd5380a44c1fd2a~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783032167&x-signature=P3uLOqSbjEYTR9N%2B5EF0km3nTuQ%3D)
    判断元素是否存在(关闭弹窗按钮) → 弹窗存在
    如果 弹窗存在 == True:
        鼠标点击(关闭弹窗按钮)
Catch:
    输出日志("没有弹窗或关闭失败,继续")

注意:如果把“输出日志”也放Try里,它永远不会报错,但会浪费Catch的判断。

三、Catch块:出错后的“B计划”

当Try块里任何一条指令报错,程序会立刻跳转到Catch块,Try块剩余的指令不再执行。

Catch块应该做的事

  1. 记录错误信息:用“输出日志”或“获取上一个错误信息”指令
Catch:
    错误信息 = 获取上一个错误信息()
    输出日志("出错了:" + 错误信息)
    # 比如输出:"出错了:元素'登录按钮'不存在"

picture.image 2. 执行备用方案:比如换成另一种点击方式

picture.image

Try:
    鼠标点击(登录按钮, 点击方式=前端点击)
Catch:
    输出日志("前端点击失败,换模拟点击")
    鼠标点击(登录按钮, 点击方式=模拟点击)

picture.image

picture.image

picture.image 3. 决定是否继续:用“继续”或“跳出循环”控制流程走向

picture.image

四、Finally块:必须执行的收尾

Finally块里的内容无论Try块是否报错都会执行。适合放:

  • 关闭弹窗
  • 关闭浏览器标签页
  • 保存当前进度到表格
  • 释放资源(关闭文件、断开数据库连接)

一个常见的坑:如果在Try里新建了一个网页对象,想在Finally里关闭它,但Finally里找不到相应的对象。原因是Finally没法确定Try里面能不能执行到获取网页对象那一步

解决方法:在Try前面先定义好这个变量。

# 先定义变量(赋个空值)
设置变量 $网页对象 = None

Try:
    打开网页("https://xxx.com") → $网页对象
    执行操作...
Catch:
    输出日志("出错了")
Finally:
    如果 $网页对象 != None:
        关闭网页($网页对象)

五、异常处理的四个实战原则

原则1:捕小不捕大

❌ 错误做法:对整个程序进行异常捕获。在任意一个环节出错,流程就会被终止。

✅ 正确做法:针对容易出错的地方进行Try捕获:

  • 在循环登录并导出账单的部分做一个捕获,出错了记录并切换到下一个账号
  • 在合并Excel的部分做一个捕获
  • 在上传FTP的部分做一个捕获

我的原则是:只对关键步骤加异常处理,比如数据写入、文件保存这些不可逆的操作。对于读取数据、页面跳转这些,只要“重试3次”就够了

原则2:重试机制(不是无限重试)

设置 $重试次数 = 0
设置 $最大重试 = 3

Try:
    点击元素("提交按钮")
Catch:
    $重试次数 = $重试次数 + 1
    如果 $重试次数 < $最大重试:
        输出日志("第{$重试次数}次重试")
        等待(2000)
        # 重新执行Try里的操作
    否则:
        输出日志("重试{$最大重试}次仍失败,跳过")
        调用子流程("发送告警")

原则3:结合错误截图保留现场

在Catch块里加“截图保存”指令:

Catch:
    输出日志("出错了:" + 获取上一个错误信息())
    截图保存(路径="C:\error\error_" + 当前时间 + ".png")

出错后不需要重现现场,直接翻截图就能看到是哪一步出了问题。

原则4:出错后发通知

Catch:
    输出日志("采集失败,错误信息:{$error}")
    截图保存()
    调用子流程("Z01_发送企微通知", 
        消息内容="❌ 采集失败!错误:{$error}")

使用时一般配合Try-Catch:如果发生异常,应用并不会终止,而是执行Catch里的代码,并把报错信息保存到exception变量中。

六、影刀常见报错速查

报错1:元素定位失败/找不到元素

错误信息元素定位失败,请检查XPath是否正确Timeout waiting for element

原因

  • 页面还没加载完就去点
  • XPath写错了或页面改版了
  • 元素在iframe里没切换进去
  • 元素被遮挡或不可见

解决方法

  1. 在点击/获取元素前加“等待元素出现”(超时5-10秒)
  2. XPath Helper验证XPath是否能定位到唯一元素
  3. 检查元素是否在iframe里,先加“切换到iframe
  4. 元素被遮挡时用“滚动到元素”或“模拟点击”
  5. 开启「AI优化元素」功能(设置-设计器-捕获元素时使用AI优化元素)

修复模板

等待元素出现("目标元素", 超时=10)
滚动到元素("目标元素")
点击元素("目标元素")

报错2:变量未定义

现象:单个运行报错,整体运行却能通过。

原因:变量在使用前没有被赋值。

解决方法

  • 在使用变量的指令之前,先用“设置变量”指令给它赋一个初始值
  • 或者在流程开头声明为全局变量

报错3:类型错误——字符串和数字拼接报错

错误信息can only concatenate str (not "int") to str

原因:把数字直接和字符串用+拼接了。

解决方法:用str(数字变量)转成字符串。

# ❌ 错误
日志内容 = "当前页:" + 页码

# ✅ 正确
日志内容 = "当前页:" + str(页码)

在影刀里用“类型转换”指令,把整数转成文本。

报错4:列表索引超出范围

错误信息list index out of range

原因:列表只有3个元素,却取了第5个(索引4)。

解决方法:取之前先判断列表长度。

如果 len(列表) > 4:
    值 = 列表[4]
否则:
    值 = ""

报错5:引擎运行失败

错误信息应用执行失败:引擎运行失败

原因

  • 自定义指令里写了不兼容的语法
  • 引用了不兼容的库
  • Python环境损坏

解决方法

  1. 检查应用日志看具体报错
  2. 大概率是元素定位失效或权限问题
  3. 重启影刀试试

报错6:获取窗口失败

现象:网速好的时候不报错、网速差的时候报错。

原因:网络问题。

解决方法:增加重试机制或加try-catch。

七、调试效率翻倍的5个小习惯

  1. 先手动跑通再上RPA:先手动操作一遍完整流程,搞清楚每一步的页面状态和可能出现的异常情况

  2. 关键步骤加日志:配合影刀的“变量值日志”指令,排查效率能提升不止一倍

  3. 异常处理不是越多越好:到处都是异常捕获会让代码变得又长又乱,反而更容易出bug

  4. 关键步骤前后加截图:出错后不需要重现现场,直接翻截图就能看到是哪一步出了问题

  5. 跑流程前先清缓存:很多奇怪的bug是因为浏览器缓存导致的

八、异常严重程度分级

并非所有异常都同等重要。根据异常的影响范围进行分级:

等级名称影响范围处理策略
P0致命整个流程无法继续立即终止+告警+人工介入
P1严重当前任务失败但可恢复重试+降级处理+记录
P2一般次要功能受影响记录日志+继续执行
P3轻微几乎无影响静默处理

常见问题速查表

问题现象根本原因修复方法
流程报错但不知道哪一行没加日志关键步骤加“输出日志”
元素有时能找到有时找不到动态ID/在iframe中加等待+检查iframe+开启AI优化
变量未定义使用前没赋值用“设置变量”赋初始值
字符串拼接报错数字和字符串直接+str()转换
列表索引超出范围取的索引大于列表长度取之前先判断长度
获取窗口失败网络问题加重试机制
引擎运行失败Python环境/库问题检查日志,重启影刀

推荐资源

  • 影刀官方帮助文档搜索“异常捕获”或“Try-Catch
  • 影刀社区搜索“异常处理”或“报错排查”,有大量实战案例
  • 影刀官方帮助文档“运行错误处理”,可配置全局邮件/企微告警

#影刀RPA #RPA自动化 #异常处理 #报错排查 #TryCatch #电商自动化

作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。如果这篇文章对你有帮助,欢迎点赞收藏,下一篇我们聊“Excel与表格处理的完整指南”。

0
0
0
0
评论
未登录
暂无评论