web-dev-qa-db-ja.com

TypeError: 'generator'オブジェクトに属性 '__getitem__'がありません

辞書を返すはずの生成関数を書きました。しかし、フィールドを印刷しようとすると、次のエラーが発生します

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']
11
MAS

ジェネレータはイテレータを返します。明示的に次に呼び出す必要があります。

コードの最終行は次のようになります-

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

理想的には、ループ内でイテレータを使用します。ループは自動的に同じことを行います。

12
hspandher

ジェネレータは必然的にiteratorsではなくiteratorsです。イテラブルには__item__()および__getitem__()メソッドが含まれ、イテレータにはnext()/__next__()メソッドが含まれます(Pythonバージョン2.x/3.x)。

9
Reza Saidafkan