影刀RPA 数据类型转换全指南:int、float、str、bool的互转
影刀RPA 数据类型转换全指南int、float、str、bool的互转作者林焱什么情况用你在影刀RPA里采集到一个价格文本128.50想拿来做计算结果128.50 10直接报错从Excel读出来的数字到了Python里变成了字符串【条件判断】里比较0和0永远不相等这些都是数据类型不匹配的问题。影刀RPA中数据在网页元素、Excel、Python代码、影刀变量之间流转时类型会频繁变化。新手最常犯的错就是拿字符串当数字算、拿数字当文本拼。本文把四种基本类型int、float、str、bool的互转规则和影刀操作场景全部讲清楚。怎么做一、四种基本类型速查类型Python写法影刀中的来源典型值int整数int循环序号、页码、计数0, 1, 100float浮点数float价格、百分比、评分3.14, 99.9str字符串str网页文本、Excel文本、输入框“hello”, “128”bool布尔值bool条件判断结果、复选框状态True, False二、转字符串str最常见的转换把任何类型变成文本用于拼接或写入# 数字转字符串price128.50price_strstr(price)# 128.5count100count_strstr(count)# 100# 布尔转字符串flagTrueflag_strstr(flag)# True# 实际场景拼接调试信息msg已处理str(count)条价格str(price)元# 推荐用f-stringmsgf已处理{count}条价格{price}元在影刀中的操作【设置变量】时如果值来自网页文本获取默认就是str类型【输出调试信息】中拼接变量时非str类型需要用str()转换或直接用f-string拼多多店群自动化上架方案三、转整数int# 字符串转整数page_str5pageint(page_str)# 5# 浮点数转整数直接截断小数部分price128.99countint(price)# 128不是四舍五入# 带符号的字符串numint(-10)# -10# 布尔转整数flagTruenumint(flag)# 1网页采集的特殊处理# 从网页采集到的价格文本需要清洗后转换raw_price128.50# 第一步去掉非数字字符clean_priceraw_price.replace(,).replace(,,).strip()# 第二步转float再转intprice_intint(float(clean_price))# 128# 从网页采集到带万的数字raw_num1.2万if万inraw_num:numint(float(raw_num.replace(万,))*10000)# 12000elif亿inraw_num:numint(float(raw_num.replace(亿,))*100000000)四、转浮点数float# 字符串转浮点数price_str128.50pricefloat(price_str)# 128.5# 整数转浮点数count100pricefloat(count)# 100.0# 百分比转换rate_str85.5%ratefloat(rate_str.replace(%,))/100# 0.855五、转布尔值bool# 字符串转布尔值注意非空字符串都是Truebool(True)# Truebool(False)# True不是False非空字符串都是Truebool()# False空字符串才是Falsebool(0)# True字符串0是非空的# 正确的字符串转布尔方法str_valTruebool_valstr_val.lower()true# Truestr_valFalsebool_valstr_val.lower()true# False# 数字转布尔bool(0)# Falsebool(1)# Truebool(100)# True六、影刀中的类型转换实战场景1Excel数字变字符串从Excel读取的数字写入网页输入框时可能需要字符串格式# 影刀从Excel读取的值excel_valueyd_var[excel_data]# 可能是 int 或 float 或 str# 统一转为字符串ifisinstance(excel_value,float):# Excel中的数字可能带浮点精度问题str_valuestr(int(excel_value))ifexcel_valueint(excel_value)elsestr(excel_value)else:str_valuestr(excel_value)yd_var[input_value]str_value场景2网页文本转数字做计算# 采集到销量文本sales_text1,234# 带逗号的数字# 去掉逗号再转数字sales_numint(sales_text.replace(,,))# 1234# 计算增长last_sales1000growth_rate(sales_num-last_sales)/last_sales*100yd_var[growth_rate]f{growth_rate:.1f}%场景3条件判断中的类型陷阱影刀【条件判断】指令中 条件: {{status}} 0 如果 status 是从网页获取的文本 0 那 0 0 → False字符串和数字不相等正确做法# 方案1统一转为字符串比较statusstr(yd_var[status])ifstatus0:# ...# 方案2统一转为数字比较statusint(yd_var[status])ifstatus0:# ...# 方案3在影刀条件判断中使用Python表达式# 条件: int({{status}}) 0七、类型检查函数在处理不确定类型的数据时先检查再转换datayd_var[some_value]# 判断类型ifisinstance(data,int):resultdata*2elifisinstance(data,float):resultround(data*2,2)elifisinstance(data,str):# 尝试转数字try:resultint(data)*2exceptValueError:try:resultfloat(data)*2exceptValueError:resultdata# 不是数字保持字符串elifisinstance(data,bool):result1ifdataelse0else:resultstr(data)yd_var[result]result八、安全转换函数模板defsafe_int(value,default0):安全转整数失败返回默认值try:ifisinstance(value,str):# 清理常见非数字字符cleanedvalue.replace(,,).replace(,).replace(¥,).strip()returnint(float(cleaned))returnint(value)except(ValueError,TypeError):returndefaultdefsafe_float(value,default0.0):安全转浮点数try:ifisinstance(value,str):cleanedvalue.replace(,,).replace(,).replace(¥,).strip()returnfloat(cleaned)returnfloat(value)except(ValueError,TypeError):returndefault# 使用示例pricesafe_float(128.50)# 128.5countsafe_int(1,234)# 1234badsafe_int(N/A,default-1)# -1有什么坑坑1int()直接转带小数点的字符串会报错现象int(128.50)直接报ValueError。原因int()只能转换纯整数字符串不能直接转128.50这种带小数点的。解决先float()再int()int(float(128.50))→ 128。或者用安全转换函数处理。TEMU店群如何管理运营坑2float精度问题导致计算结果不对现象0.1 0.2的结果是0.30000000000000004而不是0.3。原因浮点数在计算机中的二进制表示存在精度损失这是所有编程语言的通病。解决涉及金额计算时用round()保留小数位round(0.1 0.2, 2)→ 0.3。或者用整数分来计算12850分而不是128.50元最后再转回元。坑3Excel空单元格的类型问题现象从Excel读取空单元格得到的是None对它做str(None)变成字符串None而不是空字符串。解决读取后先判空valueyd_var[cell_value]ifvalueisNone:str_valueelse:str_valuestr(value)坑4网页采集的数字带隐藏字符现象从网页采集到128用int(128)却报错ValueError。原因网页文本可能包含不可见字符如\xa0不间断空格、\u200b零宽空格、BOM字符等肉眼看不见但int()不认。解决转换前用正则提取纯数字importre raw128\xa0# 包含不间断空格cleanre.sub(r[^\d.\-],,raw)numint(float(clean))坑5布尔值和字符串的混淆现象在影刀条件判断里写{{is_login}} True但is_login实际是布尔值True而不是字符串True条件永远不成立。解决在影刀的【条件判断】中布尔值不需要加引号。如果是Python表达式写yd_var[is_login] True。如果不确定类型统一用字符串处理str(yd_var[is_login]).lower() true。