try-catch
try-catch 用于捕获工作流或 RPA 运行中的异常,并在失败时执行兜底逻辑。它适合放在登录、下载、提交、调用接口、批量处理等容易失败的关键步骤外层:try 分支放置主流程,catch 分支处理异常,finally 分支做收尾。
指令标识:TryCatch
指令类型:异常处理节点
指令描述:用于工作流中的异常捕获与分支处理
先选使用方式
Section titled “先选使用方式”工作流支持「可视化编排」和「代码编排」两种创建方式。异常处理在两种方式里都能用,核心逻辑一致,区别主要是你通过界面拖入 try-catch 节点,还是通过 Python 脚本里的原生 try / except / finally 实现。
| 方式 | 怎么用 | 适合人群 |
|---|---|---|
| 可视化编排(推荐先学) | 拖入「try-catch」节点,在 try、catch、finally 分支内放置子节点 | 大多数用户,零代码,适合快速搭建和调试 |
| 代码编排(Python) | 在脚本中使用原生 try / except / finally 语句 | 熟悉代码、需要复用脚本或复杂逻辑的用户 |
异常处理是流程逻辑节点,代码编排中直接使用 Python 原生的异常处理语句即可,无需调用专门的指令方法。
什么时候用?
Section titled “什么时候用?”- 关键页面元素偶尔加载失败,需要记录错误并安全退出。
- 外部系统、HTTP 请求或插件调用可能失败,需要走备用逻辑。
- 批量处理时,某一条失败不希望整条任务直接中断。
- 高风险步骤前后需要保证日志、通知或清理动作一定执行。
如果只是普通条件判断,请使用 条件分支;如果需要验证结果是否符合预期,可以结合验证类指令。
try分支里只放需要统一捕获异常的一组节点,不要把整条流程都包进去。catch分支要给出可追踪结果,例如错误消息、通知、失败输出。finally分支适合做收尾动作,例如关闭页面、记录日志、释放资源。- 对会产生副作用的动作(提交、删除、扣费),不要只靠重试兜底,需要先保证幂等或人工确认。
可视化编排:从 0 到跑通
Section titled “可视化编排:从 0 到跑通”下面用一个常见场景演示:下载报表 RPA,下载失败时记录原因并安全收尾。按 4 步即可跑起来:
- 在画布中添加 try-catch 节点。
- 在
try分支内放置主流程:打开后台 → 等待下载按钮 → 点击下载 → 等待文件生成。 - 在
catch分支内输出失败信息,例如download_status = failed,并记录失败节点和错误消息。 - 在
finally分支内放置收尾动作,例如关闭页面或发送运行结果通知,点击运行验证。
正常情况下走完 try;失败时进入 catch,并且结束节点仍能输出可读的失败原因。
try-catch 通过分支结构组织流程,本身没有需要在表单中填写的业务参数:
| 界面名称 | 代码属性名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
| try 分支 | Try | 流程/节点 | 是 | - | 主流程,放置需要捕获异常的节点 |
| catch 分支 | Catch | 流程/节点 | 否 | - | 异常分支,try 分支出错时自动进入 |
| finally 分支 | Finally | 流程/节点 | 否 | - | 无论是否异常,最后都会执行(可选) |
catch / finally 分支可以引用 try 分支捕获到的异常信息:
| 界面名称 | 代码属性名 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| 异常节点 ID | try.nodeId | String | 否 | 发生异常的节点 ID |
| 异常错误码 | try.errorCode | String | 否 | 异常错误码 |
| 异常详情 | try.errorMessage | String | 否 | 异常详情 |
try中节点成功时,流程继续正常执行。try中节点失败时,流程能进入catch分支。catch中能记录失败节点、错误码或错误详情。finally中的收尾动作在成功和失败时都会执行。
| 现象 | 可能原因 | 处理建议 |
|---|---|---|
| 没有进入 catch | 失败节点没有抛出异常,或只是返回 false | 对返回值增加条件判断或断言 |
| catch 中不知道哪里错 | 没有输出错误节点和错误信息 | 引用 try.nodeId、try.errorCode、try.errorMessage |
| finally 没有达到预期 | 收尾动作依赖了失败前未生成的变量 | 在 finally 中先判断变量是否存在 |
| 重试后产生重复提交 | try 中包含非幂等动作 | 高风险动作前增加校验或人工确认 |
Python 代码编排
Section titled “Python 代码编排”代码编排以 Python 为主。运行上下文由代码编排模板创建,示例里只需要关注业务逻辑本身。
异常处理是流程逻辑节点,在代码编排中直接使用 Python 原生的 try / except / finally 语句即可,无需调用专门的指令方法。
基本异常处理:
try: # 尝试执行主流程 bots.message(message="开始执行可能出错的操作", sendMsgFlag=False) bots.http(url="https://api.example.com/create", methodName="post", outKey="http_result")except Exception as e: # 捕获异常,执行兜底逻辑 bots.message(message=f"捕获到异常:{e}", sendMsgFlag=False)finally: # 无论成功失败都会执行收尾逻辑 bots.message(message="执行清理逻辑", sendMsgFlag=False)批量数据处理异常容错: 单条失败时跳过并继续处理下一条:
data_list = [ {"id": 1, "name": "数据A"}, {"id": 2, "name": "数据B"}, {"id": 3, "name": "数据C"},]
for item in data_list: try: bots.message(message=f"处理数据项:ID={item['id']},名称={item['name']}", sendMsgFlag=False) bots.http( url="https://api.example.com/create", methodName="post", inputBody=f'{{"id":{item["id"]},"name":"{item["name"]}"}}', inputBodyType="json", outKey="http_item_process", ) except Exception as e: bots.message(message=f"数据项处理失败:ID={item['id']},跳过继续下一项", sendMsgFlag=False) finally: bots.message(message="数据项处理完成", sendMsgFlag=False)如果你想在工作流中通过节点动态编排指令,可使用 执行指令(XML)来组织异常处理逻辑。
Q1:必填的是哪个分支?
Section titled “Q1:必填的是哪个分支?”A: try 分支必须配置有效节点,否则 catch / finally 不会被触发。catch 和 finally 分支为可选。
Q2:catch 分支如何使用?
Section titled “Q2:catch 分支如何使用?”A: 当 try 分支出错时会自动进入 catch 分支,建议在其中配置异常处理逻辑(记录错误、通知、走备用方案)。
Q3:finally 分支什么时候执行?
Section titled “Q3:finally 分支什么时候执行?”A: finally 分支可选,无论 try 分支是否异常都会执行,适合做收尾、清理等操作。
Q4:分支间数据如何传递?
Section titled “Q4:分支间数据如何传递?”A: 分支间数据互不影响,但 catch / finally 可以引用 try 分支的异常信息(nodeId、errorCode、errorMessage)。