簡體   English   中英

TypeError:'generator'對象沒有屬性'__getitem__'

[英]TypeError: 'generator' object has no attribute '__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']

Generator返回一個迭代器,你顯然需要在它上面調用next。

你的最后一行代碼應該是這樣的 -

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

理想情況下,我們在循環中使用迭代器,它會自動為我們做同樣的事情。

生成器必須是迭代器 ,而不是迭代器 Iterables包含__item__()__getitem__()方法,而迭代器包含next() / __next__()方法(python版本2.x / 3.x)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM