4. 控制流程:条件判断(if/else)、循环(for/while)、循环控制(break/continue)、流程块设计原则

控制流程,说白了就是让程序「自己拿主意」和「反复干活」的能力。没有它,RPA 机器人就只能从上到下一条路走到黑,遇到分支就傻眼,遇到重复就崩溃。我个人习惯把控制流程比作「交通指挥系统」——条件判断是红绿灯,循环是环岛,流程块设计就是整个路网的规划。

4.1 条件判断:if/else 的实战用法

条件判断是 RPA 中最常用的逻辑。说白了就是「如果……就……否则……」。我在项目中遇到过最典型的场景:读取 Excel 中的订单金额,如果大于 1000 元走审批流程,否则自动发货。

基本结构很简单:

if 条件:
    执行动作A
else:
    执行动作B

但实际项目中,条件往往不止两个。比如判断一个网页元素是否存在:

if 元素存在:
    点击该元素
elif 元素不存在但备用元素存在:
    点击备用元素
else:
    记录日志并发送告警

嗯,这里要注意一个坑:条件的顺序很重要。我曾经把最宽松的条件写在最前面,结果后面的条件永远执行不到。调试了一下午才发现——RPA 是按顺序判断的,一旦匹配就跳出。

避坑指南:我曾经在判断「是否工作日」时,先判断了「是否为周末」,再判断「是否为节假日」。结果节假日落在周末时,程序直接走了周末分支,漏掉了节假日特殊处理。正确的做法是:先判断最特殊的条件,再判断一般条件。

4.2 循环:for 和 while 的选择

循环是 RPA 的「体力活」。你想想看,处理 1000 行 Excel 数据、遍历 50 个网页元素、重试 3 次失败操作——这些都得靠循环。

for 循环适合「知道要循环多少次」的场景。比如遍历一个列表:

for 行 in Excel表格的所有行:
    处理该行数据
    写入结果

while 循环适合「不知道要循环多少次,但知道什么时候停」的场景。比如等待某个网页元素加载:

while 元素未出现:
    等待1秒
    刷新页面
    计数+1
    if 计数 > 30:
        超时退出

我个人习惯:能用 for 就不用 while。为什么?for 循环天然有边界,不会死循环。while 一旦条件写错,机器人就卡死在那里了。我在项目中见过一个同事的 while 循环,条件永远为真,结果机器人跑了整整一个周末……

循环类型 适用场景 风险点
for 循环 遍历列表、表格、集合 列表为空时直接跳过
while 循环 等待条件、重试机制 容易死循环,必须加超时

4.3 循环控制:break 和 continue 的精髓

这两个关键字,说白了就是「提前下车」和「跳过这一站」。

break:立即终止整个循环。我在处理「找到第一个符合条件的记录就停止」时常用:

for 订单 in 订单列表:
    if 订单金额 > 10000:
        标记为VIP订单
        break  # 找到了,后面的不用看了

continue:跳过当前这次循环,继续下一次。比如过滤掉无效数据:

for 行 in 数据表:
    if 行数据为空:
        continue  # 跳过空行
    处理该行数据
小技巧:我建议在 break 和 continue 之前,先打印一条日志。这样调试时能清楚知道「为什么跳过了」或者「为什么终止了」。别问我怎么知道的——我曾经因为没加日志,找了一个小时的 bug,最后发现是条件写反了。

4.4 流程块设计原则:让代码像乐高一样清晰

控制流程多了,代码就容易变成「意大利面条」。我总结了几条原则,都是血泪换来的:

  1. 单一出口原则:每个流程块尽量只有一个出口。不要这里 return 一下,那里 break 一下,调试起来想哭。
  2. 嵌套不超过三层:if 里面套 if,再套 for,再套 while……这种代码我见过,改起来想骂人。超过三层就拆成子流程。
  3. 条件表达式要可读:别写 if a and not b or c and d 这种。拆开写,加注释,对未来的自己好一点。
  4. 循环一定要有退出机制:while 循环必须配计数器+超时。for 循环要考虑列表为空的情况。
核心思想:控制流程是 RPA 的骨架。骨架歪了,肌肉再发达也没用。我见过太多「能跑但不敢改」的 RPA 项目,问题都出在流程块设计上。记住:好的控制流程,读起来像讲故事;烂的控制流程,读起来像破案。

最后说一句:写控制流程时,先画流程图,再写代码。这是我个人的铁律。流程图画清楚了,代码就是翻译工作。流程图都画不清楚,写出来的代码一定是一团浆糊。