影刀RPA 条件判断if-else的正确写法与嵌套技巧
作者:林焱
条件判断是流程控制的基础。几乎每个RPA流程都有条件分支:如果登录成功就继续采集、如果数据为空就跳过、如果价格超过阈值就告警。但很多新手写条件判断时逻辑混乱——嵌套太深看不懂、条件写反了、多条件组合搞错了优先级。
这篇文章把if-else的正确写法和实战技巧讲全。
一、影刀中的条件判断
1.1 影刀的【如果】指令
影刀提供可视化的条件判断指令:
【如果】 条件:变量 status == "success" 【日志输出】"操作成功" 【否则如果】 条件:变量 status == "pending" 【日志输出】"处理中" 【否则】 【日志输出】"操作失败" 【结束如果】1.2 Python中的if-else
在Python节点中:
status=get_variable("status")ifstatus=="success":set_variable("message","操作成功")elifstatus=="pending":set_variable("message","处理中")else:set_variable("message","操作失败")二、条件表达式的写法
2.1 比较运算符
# 等于ifa==b:# 不等于ifa!=b:# 大于/小于ifa>b:ifa<b:# 大于等于/小于等于ifa>=b:ifa<=b:坑:==和=的区别
=是赋值,==是比较。if a = 5:会报错(Python中赋值不能作为条件)。
坑:浮点数比较
# 浮点数直接比较可能不准确0.1+0.2==0.3# False!# 用近似比较abs(0.1+0.2-0.3)<0.0001# True2.2 字符串比较
拼多多店群自动化上架方案
# 精确匹配ifname=="蓝牙耳机":# 不区分大小写ifname.lower()=="蓝牙耳机":# 包含if"耳机"inname:# 不包含if"手机"notinname:# 以...开头ifname.startswith("蓝牙"):# 以...结尾ifname.endswith("Pro"):# 正则匹配importreifre.match(r'^\d{4}-\d{2}-\d{2}$',date_str):2.3 空值判断
# 判断为空ifnottext:# 空字符串、None、空列表都为Trueprint("数据为空")# 判断非空iftext:# 有内容print("有数据")# 判断NoneifvalueisNone:print("值为None")# 判断空字符串(不包含None)iftext=="":print("空字符串")# 判断空列表ifnotmy_list:print("列表为空")iflen(my_list)==0:# 等价但不如not简洁print("列表为空")坑:0和空值的判断
# 0、空字符串、空列表、None都是Falseif0:# Falseif"":# Falseif[]:# FalseifNone:# False# 但0和空是不同概念count=0ifcount:# False!可能不是你期望的print("有数据")# 如果0也是有效值ifcountisnotNone:# Trueprint("有值")三、多条件组合
3.1 AND(与)
# 两个条件都满足ifprice>100andstock>0:print("在售且价格高")# 多个条件ifprice>100andstock>0andstatus=="active":print("符合条件")3.2 OR(或)
# 任一条件满足ifstatus=="在售"orstatus=="预售":print("可购买")# 匹配多个值之一ifstatusin["在售","预售","补货中"]:print("可购买")3.3 NOT(非)
# 条件不满足ifnot(price>1000):print("价格合理")# 等价于ifprice<=1000:print("价格合理")3.4 组合条件
# AND和OR组合(注意括号!)if(status=="在售"orstatus=="预售")andprice<100:print("便宜且可购买")# 复杂条件if((category=="电子"andprice>500)or(category=="服装"andprice>200)):print("高价商品")坑:运算符优先级
and的优先级高于or:
# 这两个不等价ifaorbandc:# 等价于 if a or (b and c)if(aorb)andc:# 先算a or b,再and c永远用括号明确优先级,不要依赖默认优先级。
四、嵌套条件判断
4.1 基本嵌套
ifuser_type=="VIP":iforder_amount>1000:discount=0.8else:discount=0.9else:iforder_amount>1000:discount=0.95else:discount=1.04.2 减少嵌套的技巧
技巧一:提前返回
# 嵌套写法defprocess(data):ifdata:if"id"indata:ifdata["id"]>0:# 处理逻辑pass# 扁平写法(提前返回/跳过)defprocess(data):ifnotdata:returnif"id"notindata:returnifdata["id"]<=0:return# 处理逻辑在影刀流程中,可以用"跳过本次循环"或"退出循环"来减少嵌套。
技巧二:用elif替代嵌套
# 嵌套写法ifscore>=90:grade="A"else:ifscore>=80:grade="B"else:ifscore>=60:grade="C"else:grade="D"# elif写法(清晰)ifscore>=90:grade="A"elifscore>=80:grade="B"elifscore>=60:grade="C"else:grade="D"技巧三:用字典替代多重if
# 多重ififstatus==0:desc="待处理"elifstatus==1:desc="处理中"elifstatus==2:desc="已完成"elifstatus==3:desc="已取消"else:desc="未知"# 字典替代(更简洁)status_map={0:"待处理",1:"处理中",2:"已完成",3:"已取消"}desc=status_map.get(status,"未知")技巧四:用三元表达式简化简单判断
# if-elseifprice>100:label="贵"else:label="便宜"# 三元表达式(一行)label="贵"ifprice>100else"便宜"五、条件判断的常见模式
5.1 检查数据有效性
data=get_variable("collected_data")# 多重检查ifnotdata:set_variable("error","数据为空")elifnotisinstance(data,list):set_variable("error","数据格式错误")eliflen(data)==0:set_variable("error","数据列表为空")else:# 数据有效,继续处理set_variable("error","")set_variable("data_count",len(data))5.2 分情况处理
source=get_variable("data_source")ifsource=="web":# 网页采集的数据result=process_web_data(data)elifsource=="api":# API返回的数据result=process_api_data(data)elifsource=="excel":# Excel读取的数据result=process_excel_data(data)else:set_variable("error",f"未知数据源:{source}")result=None5.3 重试逻辑
max_retry=3retry_count=0success=Falsewhileretry_count<max_retryandnotsuccess:retry_count+=1try:# 执行操作result=do_something()ifresult:success=TrueexceptException:ifretry_count<max_retry:importtime time.sleep(5)# 等5秒重试else:set_variable("error",f"重试{max_retry}次后仍失败")5.4 区间判断
score=get_variable("score")ifscore<60:level="不及格"elif60<=score<80:level="及格"elif80<=score<90:[video(video-Wf9EoZWI-1784397383123)(type-csdn)(url-https://live.csdn.net/v/embed/524993)(image-https://v-blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title-TEMU店群如何管理运营?)]level="良好"elif90<=score<=100:level="优秀"else:level="无效分数"六、在影刀流程中的条件判断实践
6.1 影刀条件指令vs Python条件
| 场景 | 推荐 | 原因 |
|---|---|---|
| 简单条件,1-2个分支 | 影刀【如果】指令 | 可视化,直观 |
| 多条件组合 | Python节点 | 逻辑表达更清晰 |
| 多重分支(3个以上) | Python节点 | elif更清晰 |
| 需要在分支中执行多个操作 | 影刀【如果】指令 | 可视化更易看 |
| 复杂业务逻辑 | Python节点 | 灵活 |
6.2 影刀中的条件表达式写法
影刀的【如果】指令中,条件表达式使用Python语法:
条件:变量名 运算符 值 示例: status == "success" price > 100 "耳机" in product_name len(data_list) > 0 not error_msg (a > 0) and (b < 100)6.3 条件判断后设置变量
# 在Python节点中做条件判断并设置变量price=get_variable("price")vip_level=get_variable("vip_level")ifvip_level=="gold":final_price=price*0.8elifvip_level=="silver":final_price=price*0.9else:final_price=price set_variable("final_price",round(final_price,2))七、避坑清单
坑1:条件写反
# 错误:想判断"不等于空",写成了"等于空"ifnottext:# 这是判断为空process(text)# 正确iftext:# 判断非空process(text)坑2:=和==混淆
# 错误ifstatus="success":# 赋值,不是比较,会报错# 正确ifstatus=="success":坑3:None判断方式
# 推荐ifvalueisNone:ifvalueisnotNone:# 不推荐(虽然也能用,但不符合Python规范)ifvalue==None:坑4:is和==混淆
# is比较内存地址,==比较值a=[1,2,3]b=[1,2,3]a==b# True(值相同)aisb# False(不是同一个对象)# None比较用isvalueisNone# 正确value==None# 不推荐坑5:嵌套太深
# 嵌套4层以上就很难维护了ifa:ifb:ifc:ifd:# 太深了!pass# 用提前返回/continue/break扁平化ifnota:return# 或 continueifnotb:returnifnotc:returnifnotd:return# 主逻辑坑6:忘记else分支
# 如果status不是以上任何值,result没有被赋值ifstatus=="A":result=1elifstatus=="B":result=2# result可能未定义!# 加else兜底else:result=0# 或 raise ValueError(f"未知状态:{status}")