TypeError: object of type 'Example' has no len()

在使用torchtext处理文本,并对iterator进行循环迭代对时候报出错误:“TypeError: object of type ‘Example’ has no len()”,调试的时候发现在iterator.py中对iterator.dataset有如下的操作:

xs = [self.dataset[i] for i in self.random_shuffler(range(len(self.dataset)))]

而iterator.dataset 是 example类型的数据,该类型说是没有len方法,我的代码如下:

train_iter = torchtext.data.BucketIterator.splits(datasets=train_txt, batch_size=1,
                                     sort_key=lambda x: len(x.content))[0] #iterator的定义部分

报错行:

for data in self.itr # self.itr 即上述train_itr

解决办法:不要使用BucketIterator,改为普通的Iterator即可,代码如下:

train_iter = torchtext.data.Iterator(dataset=train_txt, batch_size=1, train=True
                                     , sort_key=lambda x: len(x.content))

使用普通的Iterator之后,可以直接对Iterator.dataset进行迭代:

for data in self.itr.dataset:
	x = data.source
	y = data.target

你可能感兴趣的:(TypeError: object of type 'Example' has no len())