2024-01-09 python 迭代器使用小记录

2024-01-08  本文已影响0人  Steven_2016
                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的数据类型
大家在遇到需要多次迭代的情况,一般是怎么处理的呢?文章中有错误之处,欢迎大佬们斧正

上一篇 下一篇

猜你喜欢

热点阅读