Python实现同索引列表元素替换及IronPython缩进报错排查
报错原因说明
unindent does not match any outer indentation level属于Python语法层面的缩进匹配错误,和你设计的按索引替换的业务逻辑无直接关系:
- 这类报错在Dynamo内置的IronPython执行环境中触发频率很高,核心原因是编写代码时混用了Tab制表符和半角空格作为缩进标记,两种标记的显示宽度不统一,解释器无法识别缩进对应的代码嵌套层级,直接中断执行。
- 你编写的通过
enumerate获取索引、匹配同位置list2元素做替换的逻辑,完全符合测试样例的输出要求,只要修正缩进问题即可正常运行。
修复方案
- 清空脚本中所有残留的Tab缩进,将所有代码块的嵌套层级统一使用4个半角空格对齐,重点检查两处缩进匹配关系:
for循环对应的循环体内容,缩进需和for语句保持正确的块级嵌套关系if/else分支下的out.append()语句,需和对应的判断语句保持同一缩进层级,避免出现无规则的缩进错位
- 修正后可直接运行的代码示例:
list1 = IN[0] list2 = IN[1] out = [] for idx, itm in enumerate(list1): if itm == [] or itm == "Pxxx-xx": out.append(list2[idx]) else: out.append(itm) #Assign your output to the OUT variable. OUT = out
可选稳定性增强
如果存在两个输入列表长度不匹配的使用场景,可以补充越界保护逻辑,避免运行时触发索引越界错误:
list1 = IN[0] list2 = IN[1] out = [] common_len = min(len(list1), len(list2)) # 遍历两个列表的公共长度区间执行替换逻辑 for idx in range(common_len): current_val = list1[idx] if current_val == [] or current_val == "Pxxx-xx": out.append(list2[idx]) else: out.append(current_val) # 若list1长度超过list2,超出区间的元素直接保留list1原内容 if len(list1) > common_len: out.extend(list1[common_len:]) OUT = out
内容的提问来源于stack exchange,提问作者TechnologyFreak
相关产品推荐
相关产品推荐

