子流程里改了变量,主流程里没变。主流程定义的变量,子流程里读不到。输出参数明明赋值了,调用方拿到的是空。这些问题的根因都是同一个:没搞懂影刀RPA的变量作用域和参数传递规则。
影刀RPA的变量不是全局共享的,每个流程和子流程有独立的作用域。 数据进出子流程,必须通过输入输出参数显式传递。
这篇把变量作用域、输入输出参数配置、值传递与引用传递的区别一次讲透,每个操作精确到按钮。
影刀RPA变量作用域的三层结构
影刀RPA的变量分三层,作用范围完全不同。
① 流程变量:在当前流程内有效。主流程定义的变量,子流程默认读不到。
② 子流程输入参数:调用子流程时传入的值。子流程内部只能读,不能改调用方的原始变量。
③ 子流程输出参数:子流程返回给调用方的值。子流程结束前必须赋值,否则调用方拿到空。
操作路径:双击进入子流程 → 点击右上角“流程属性” → 在“输入参数”和“输出参数”区域添加。
这里很容易踩坑,注意看:主流程的变量名和子流程的输入参数名可以不同。调用时在“调用子流程”指令中做映射,不要指望名字一样就能自动传。
版本差异提醒:影刀RPA社区版每天30分钟运行时长,调试参数传递够用。创业版无限制,适合维护大型多子流程项目。魔法指令(3.0新特性)可对话式生成参数配置,但作用域逻辑还是手动配更稳。
输入参数配置:从主流程传数据进子流程
输入参数是子流程接收外部数据的入口。配置分两步:子流程定义,主流程传值。
子流程定义输入参数:
- 双击进入子流程。
- 点击右上角“流程属性”。
- 在“输入参数”区域点“添加”。
- 参数名填
str_关键词,类型选“字符串”,默认值留空。
5. 再添加
int_最大页数,类型选“整数”,默认值填 10。
主流程调用时传值:
- 在主流程拖入“调用子流程”指令。
- 在指令详情面板中,“子流程名称”下拉选择目标子流程。
- “输入参数”区域,把主流程的变量填进去:
str_关键词选$搜索关键词$,int_最大页数选$页数上限$。
# 影刀RPA子流程内部使用输入参数
# 直接引用参数名,不用加$符号在Python里
# 如果是在影刀RPA指令中引用,用 $str_关键词$
# Python代码中读取输入参数

keyword = str_关键词
max_pages = int_最大页数
print(f"搜索关键词:{keyword},最大页数:{max_pages}")
推荐一个方法,实测好用:给输入参数设默认值。单独运行子流程调试时,不用手动填参数,直接跑。
输出参数配置:从子流程传数据回主流程
输出参数是子流程返回结果的出口。必须在子流程结束前赋值。
子流程定义输出参数:
- 在“流程属性”的“输出参数”区域点“添加”。
- 参数名填
dt_采集结果,类型选“数据表格”。 - 再添加
int_采集条数,类型选“整数”。
子流程内部赋值:
# 影刀RPA子流程末尾,给输出参数赋值
dt_采集结果 = 数据表格变量 # 把采集到的表格赋给输出参数
int_采集条数 = len(数据表格变量) # 计算条数
# 注意:输出参数必须在子流程结束前赋值
# 如果中途报错退出,输出参数是空的
主流程接收:
- 在“调用子流程”指令的“输出参数”区域,把子流程的输出参数映射到主流程变量。
dt_采集结果赋给$主流程采集结果$。int_采集条数赋给$总条数$。
这里很容易踩坑,注意看:如果子流程中途报错,Catch块里也要给输出参数赋默认值。否则主流程拿到的是空值,后续处理会报类型错误。
值传递与引用传递:数据表格和列表的特殊性
影刀RPA的参数传递分两种:值传递和引用传递。
值传递:字符串、数字、布尔。子流程改这些参数,不影响主流程的原始变量。
引用传递:数据表格、列表。子流程改这些参数的内容,主流程的原始变量也会变。
# 影刀RPA中值传递示例
# 主流程:str_关键词 = "护肤品"
# 子流程内:str_关键词 = "化妆品"
# 子流程结束后,主流程的 str_关键词 还是 "护肤品"
# 影刀RPA中引用传递示例
# 主流程:dt_数据 = 表格变量(有3行)
# 子流程内:往 dt_数据 里追加一行
# 子流程结束后,主流程的 dt_数据 变成4行
容易踩的坑:如果不想让子流程修改原始数据表格,在传入前先复制一份。影刀RPA中可以用“复制数据表格”指令,或Python的 copy.deepcopy()。
import copy
# 子流程内,先深拷贝再修改
dt_本地副本 = copy.deepcopy(dt_输入数据)
# 后续操作 dt_本地副本,不影响主流程的原始数据
常见问题与易错速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 子流程读不到主流程变量 | 作用域隔离 | 用输入参数传入 |
| 输出参数为空 | 中途报错退出 | Catch块赋默认值 |
| 主流程变量被意外修改 | 引用传递 | 传副本或声明不修改 |
| 参数类型不匹配 | 类型选错 | 定义时选对类型 |
| 社区版超时 | 30分钟限制 | 分批次或升级创业版 |
特别提醒:输入输出参数的命名用英文前缀,和变量命名规范一致。不要用中文,影刀RPA表达式里中文参数容易识别错。
推荐资源
- 影刀RPA官方文档:搜索“流程参数”和“子流程”
- 影刀学院B站账号:有参数传递实战视频
- Python官方文档:copy模块深拷贝与浅拷贝
一个实测好用的习惯:每写完一个子流程,先单独运行测试输入输出参数是否正确。确认无误再接入主流程。省掉在主流程里排查参数错误的麻烦。
#影刀RPA #RPA自动化 #流程参数 #变量作用域 #子流程 #开发规范
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
