跳转到内容

try-catch

try-catch 用于捕获工作流或 RPA 运行中的异常,并在失败时执行兜底逻辑。它适合放在登录、下载、提交、调用接口、批量处理等容易失败的关键步骤外层:try 分支放置主流程,catch 分支处理异常,finally 分支做收尾。

指令标识:TryCatch
指令类型:异常处理节点
指令描述:用于工作流中的异常捕获与分支处理

工作流支持「可视化编排」和「代码编排」两种创建方式。异常处理在两种方式里都能用,核心逻辑一致,区别主要是你通过界面拖入 try-catch 节点,还是通过 Python 脚本里的原生 try / except / finally 实现。

方式怎么用适合人群
可视化编排(推荐先学)拖入「try-catch」节点,在 trycatchfinally 分支内放置子节点大多数用户,零代码,适合快速搭建和调试
代码编排(Python)在脚本中使用原生 try / except / finally 语句熟悉代码、需要复用脚本或复杂逻辑的用户

异常处理是流程逻辑节点,代码编排中直接使用 Python 原生的异常处理语句即可,无需调用专门的指令方法。

  • 关键页面元素偶尔加载失败,需要记录错误并安全退出。
  • 外部系统、HTTP 请求或插件调用可能失败,需要走备用逻辑。
  • 批量处理时,某一条失败不希望整条任务直接中断。
  • 高风险步骤前后需要保证日志、通知或清理动作一定执行。

如果只是普通条件判断,请使用 条件分支;如果需要验证结果是否符合预期,可以结合验证类指令。

  • try 分支里只放需要统一捕获异常的一组节点,不要把整条流程都包进去。
  • catch 分支要给出可追踪结果,例如错误消息、通知、失败输出。
  • finally 分支适合做收尾动作,例如关闭页面、记录日志、释放资源。
  • 对会产生副作用的动作(提交、删除、扣费),不要只靠重试兜底,需要先保证幂等或人工确认。
try-catch

下面用一个常见场景演示:下载报表 RPA,下载失败时记录原因并安全收尾。按 4 步即可跑起来:

  1. 在画布中添加 try-catch 节点。
  2. try 分支内放置主流程:打开后台 → 等待下载按钮 → 点击下载 → 等待文件生成。
  3. catch 分支内输出失败信息,例如 download_status = failed,并记录失败节点和错误消息。
  4. finally 分支内放置收尾动作,例如关闭页面或发送运行结果通知,点击运行验证。

正常情况下走完 try;失败时进入 catch,并且结束节点仍能输出可读的失败原因。

try-catch 通过分支结构组织流程,本身没有需要在表单中填写的业务参数:

界面名称代码属性名类型必填默认值说明
try 分支Try流程/节点-主流程,放置需要捕获异常的节点
catch 分支Catch流程/节点-异常分支,try 分支出错时自动进入
finally 分支Finally流程/节点-无论是否异常,最后都会执行(可选)

catch / finally 分支可以引用 try 分支捕获到的异常信息:

界面名称代码属性名类型必填说明
异常节点 IDtry.nodeIdString发生异常的节点 ID
异常错误码try.errorCodeString异常错误码
异常详情try.errorMessageString异常详情
  • try 中节点成功时,流程继续正常执行。
  • try 中节点失败时,流程能进入 catch 分支。
  • catch 中能记录失败节点、错误码或错误详情。
  • finally 中的收尾动作在成功和失败时都会执行。
现象可能原因处理建议
没有进入 catch失败节点没有抛出异常,或只是返回 false对返回值增加条件判断或断言
catch 中不知道哪里错没有输出错误节点和错误信息引用 try.nodeIdtry.errorCodetry.errorMessage
finally 没有达到预期收尾动作依赖了失败前未生成的变量在 finally 中先判断变量是否存在
重试后产生重复提交try 中包含非幂等动作高风险动作前增加校验或人工确认

代码编排以 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)来组织异常处理逻辑。

A: try 分支必须配置有效节点,否则 catch / finally 不会被触发。catchfinally 分支为可选。

A:try 分支出错时会自动进入 catch 分支,建议在其中配置异常处理逻辑(记录错误、通知、走备用方案)。

A: finally 分支可选,无论 try 分支是否异常都会执行,适合做收尾、清理等操作。

A: 分支间数据互不影响,但 catch / finally 可以引用 try 分支的异常信息(nodeIderrorCodeerrorMessage)。