for row in key.value:
# 记录占位符号数量,如果不等于 国别数,则异常
placeholderCount = 0
valueCount = 0
for cell in row:
# print(f"{key.name} 对应的value {cell.column} {cell.value}")
value = cell.value
if value is None:
print(f"⚠️{key.name} {key.excelRow}行 {cell.column}列 内容为空")
else:
valueCount += 1
if KeyManager.contains_string("%", value):
placeholderCount += 1
if valueCount != len(self.country):
print(f"{key.name} ❌ 对应的 文案数量异常 {valueCount}")
continue
if placeholderCount > 0 and placeholderCount != len(self.country):
print(f"{key.name} ⚠️对应的 占位符 % 异常")
continue
key.vail = True
self.vaildKeys.append(key)
如上方代码所示 key.value 是一个迭代器类型,代码可以正常执行,下方代码key.value 也是迭代器类型,代码未报错,但是第二层for循环无法进入
for key in self.vaildKeys:
# print(f"合法key数量 {len(self.vaildKeys)} value {key.value}")
for row in key.value:
# print(f"valueToCountryJson2 : {row} ")
for cell in row:
# print(f"valueToCountryJson2 {key.name} 对应的value {cell.column} {cell.value}")
if cell.column == country.excelColumn:
value = cell.value
result[key.name] = value
起初并没有定位是迭代器的问题,一直以为是不是类型异常,结果这个也排除了。
针对这个问题,查了一下发现是一个很基础很基础的问题:迭代器在执行完一次迭代后,就会被清空,再次进行迭代,内容就是空的。
这里的解决方案
方案1 key.value 不使用迭代器类型
方案2 key.value 在执行完一次迭代后,重新赋值,这样就能继续使用,但这样有点不太规范,因为改变了key.value的数据类型
大家在遇到需要多次迭代的情况,一般是怎么处理的呢?文章中有错误之处,欢迎大佬们斧正