影刀RPA新手教程:Python代码报错完全指南——SyntaxError、IndentationError、NameError
影刀RPA新手教程Python代码报错完全指南——SyntaxError、IndentationError、NameError一段让我怀疑人生的代码“IndentationError: unexpected indent”这行报错出现在我写的第五行Python代码上。我盯着那行代码看了十分钟完全看不出问题在哪里。空格对齐的啊缩进没问题啊怎么会unexpected indent后来我把那行代码复制到记事本里才发现——混用了Tab和空格。Tab缩进的部分和空格缩进的部分在编辑器里看起来对齐但对Python解释器来说是不同的。这篇文章我用一次Python代码报错排查的经历带你搞懂影刀里写Python的各种坑。案例主线一个数据清洗脚本报了IndentationError这个案例中我需要写一段Python处理从网页抓到的文本。功能很简单接收一个原始文件名去掉文件名里的非法字符这些字符不能出现在文件名中截断过长的文件名返回处理后的文件名代码看起来没什么问题但一运行就是IndentationError。IndentationError缩进错误这是Python新手最容易犯的错误。Python靠缩进来区分代码块不像Java或C用大括号。所以缩进必须完全一致。错误示例混用了Tab和空格defclean_name(name):namename.strip()namename.replace(/,_)namename.replace(\\,_)# 这行用了Tab上面是4个空格returnname看起来对齐但Python看到的是不同的缩进方式。正确做法统一用4个空格。在一个Python代码块里要么全用空格要么全用Tab推荐空格。影刀的Python代码编辑器里可以设置点击编辑器右下角的Spaces: 4确保缩进模式是空格。拼多多店群自动化报活动上架如果不确定把代码全选用ShiftTab退回所有缩进再重新用空格缩进。另一个常见场景复制粘贴的代码缩进混乱。从网页或ChatGPT复制代码经常会有缩进问题。我习惯了粘贴进代码块后第一件事全选代码按Ctrl[取消所有缩进再手动重新缩进。虽然费点时间但省了后面排查的时间。SyntaxError语法错误这个是最常见的Python报错。其实就是你写的代码不符合Python语法。典型错误一字符串少了引号。# 错误name张三# 没有引号message你好# 引号没有闭合典型错误二括号没成对。# 错误resultcalculate(a,b# 少了一个右括号data[1,2,3,# 列表没有正确关闭典型错误三if语句忘了冒号。# 错误ifprice100print(高于100)# 正确ifprice100:print(高于100)排查方法看报错信息里的行号。Python的SyntaxError会告诉你第几行出了什么问题。比如“SyntaxError: invalid syntax, line 5”。意思是第5行有语法错误重点检查第5行和它前面一行。有时错误在第5行但实际原因是第4行少了括号。NameError变量名未定义这个在影刀里更常见因为变量可能来自影刀流程。典型错误一用了影刀流程的变量但没传进来。在Python代码块里直接用了pricetotalpricetax# 报NameError: name price is not defined但price是影刀流程里的变量代码块里拿不到。解决方法用输入变量传进来。在Python代码块右侧的属性面板中找到输入变量。把影刀流程里的变量比如price映射到代码块的变量名。代码块里就可以用了totalpricetax# price已经通过输入变量映射进来了同理代码块里算出的结果要通过输出变量传回影刀流程。典型错误二变量拼写错误。user_name张三print(username)# 报NameError: name username is not defined# 定义的是user_name有下划线用的是username没有下划线TypeError类型错误这个在第4篇文章里详细讲了这里补充一个容易犯的。对None做操作。resultsome_function()print(result.upper())# 如果some_function返回None这里报TypeError排查方法在操作前检查。resultsome_function()ifresultisnotNone:print(result.upper())else:print(返回值为空)IndexError和KeyError处理列表和字典时的常见错误。IndexError列表索引越界。data[1,2,3]print(data[3])# 报IndexError列表只有索引0、1、2解决方法先检查长度。iflen(data)3:print(data[3])# 或用try-excepttry:print(data[3])exceptIndexError:print(没有第4个元素)KeyError字典没有这个键。info{name:张三,age:25}print(info[address])# 报KeyError: address解决方法用get方法取默认值。addressinfo.get(address,未知地址)print(address)# 输出未知地址[video(video-XpYEOpGv-1783181728304)(type-csdn)(url-https://live.csdn.net/v/embed/526817)(image-https://v-blog.csdnimg.cn/asset/1d3c3709da119dd8c13ab01e9b282520/cover/Cover0.jpg)(title-TEMU店群矩阵自动化运营核价报活动)]在影刀中调试Python代码影刀的Python代码块调试起来不太方便因为它不是一个完整IDE。我当时踩过的坑就是——在代码块里写print调试运行后发现看不到输出。解决方法一用日志输出。在Python代码块里importlogging logging.basicConfig(levellogging.INFO,format%(message)s)logging.info(f当前price的值:{price})影刀运行时可以在日志窗口看到输出。解决方法二把中间值传回影刀检查。把关键的中间变量设为输出变量。在影刀流程里用一个弹窗提示指令显示这个值。虽然土但能看到代码块里面到底发生了什么。解决方法三在代码块外用影刀变量调试。把复杂的逻辑拆成多个小Python代码块。每个代码块只做一件事输入输出清晰出问题容易定位。这是我现在写复杂流程的标准做法——不写大段Python而是多个小段每段独立可测。影刀Python代码块设置要点很多人不知道代码块有设置可以改。在代码块的属性面板中运行环境建议选Python 3兼容性最好第三方库勾选需要的库requests、openpyxl等超时时间如果代码复杂把默认的30秒改大一点如果用了影刀没预装的第三方库需要手动安装在影刀安装目录找到Python环境用pip安装。影刀默认Python路径一般在C:\Program Files\影刀\resources\python\打开命令行cd到那个目录下python-mpipinstall你要的库名关于Python代码在RPA中的应用技巧我持续更新在 home.linyan.cloud 上。#影刀RPA #RPA教程 #Python #语法错误 #缩进 #调试 #NameError #TypeError #代码规范 #新手入门作者林焱