Python遍历OrientRecord列表遇TypeError,需循环取连续两对象属性
解决Python循环中一次处理两个OrientRecord对象的问题
你遇到的TypeError: 'OrientRecord' object is not an iterator错误原因很清晰——原来的代码里,items是从列表中逐个取出的单个OrientRecord对象,它本身不是迭代器,所以不能用next()去调用它。下面给你两种可行的解决方案:
方法一:按索引步长遍历
直接通过列表索引,每次跳过一个元素,处理连续的一对对象:
for i in range(0, len(iteritems), 2): # 处理第一个对象 x = iteritems[i].oRecordData print(x['attribute1']) # 检查是否存在下一个对象,避免索引越界 if i + 1 < len(iteritems): y = iteritems[i+1].oRecordData print(y['attribute2'])
这种方法简单直观,适合需要明确控制索引的场景,还能避免列表长度为奇数时出现索引错误。
方法二:使用迭代器逐对取出
先把列表转换成迭代器,然后在循环中每次取出两个元素:
iter_obj = iter(iteritems) while True: try: # 获取第一个元素 item1 = next(iter_obj) x = item1.oRecordData print(x['attribute1']) # 获取第二个元素 item2 = next(iter_obj) y = item2.oRecordData print(y['attribute2']) except StopIteration: # 迭代完成,退出循环 break
这种方法更符合迭代器的使用逻辑,不管列表长度是奇数还是偶数,都能安全处理——如果最后只剩单个元素,只会打印它的attribute1,不会报错。
原来的代码为什么会报错?
你原来的for items in iteritems是逐个遍历列表中的每个OrientRecord对象,所以每次循环里的items都是单个对象,不是可以用next()调用的迭代器,自然会触发类型错误。
内容的提问来源于stack exchange,提问作者TeeKay
相关产品推荐
相关产品推荐

