TypeError:“发电机"对象没有属性"__getitem__" [英] TypeError: 'generator' object has no attribute '__getitem__'

查看:74
本文介绍了TypeError:“发电机"对象没有属性"__getitem__"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个生成函数,应该返回一个字典.但是,当我尝试打印字段时,出现以下错误

I have written a generating function that should return a dictionary. however when I try to print a field I get the following error

print row2['SearchDate']
TypeError: 'generator' object has no attribute '__getitem__'

这是我的代码

from csv import DictReader
import pandas as pd
import numpy as np


def genSearch(SearchInfo):
    for row2 in DictReader(open(SearchInfo)):
        yield row2

train = 'minitrain.csv'

SearchInfo = 'SearchInfo.csv'

row2 = {'SearchID': -1}

for row1 in DictReader(open(train)):
    if 'SearchID' in row1 and 'SearchID' in row2 and row1['SearchID'] == row2['SearchID']:
        x = deepcopy( row1 )
        #x['SearchDate'] = row2['percent']
        x.update(row2)    
        print 'new'
        print x
    else: 
        #call your generator
        row2 = genSearch(SearchInfo)
        print row2['SearchDate']

推荐答案

Generator返回一个迭代器,您需要明确地对其进行调用.

Generator returns an iterator, you explicitly needs to call next on it.

您的最后一行代码应类似于-

Your last line of code should be something like -

rows_generator = genSearch(SearchInfo)
row2 = next(rows_generator, None)
print row2['SearchDate']

理想情况下,我们在循环中使用迭代器,这会自动为我们做同样的事情.

Ideally, we use iterators in a loop, which automatically does the same for us.

这篇关于TypeError:“发电机"对象没有属性"__getitem__"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆