PyTorch UnicodeEncodeError:' latin-1'编解码器不能对字符' \ u22f1'进行编码。

时间:2018-03-12 10:00:17

标签: python pytorch

我试图使用PyTorch数据集。它适用于我的笔记本电脑。但是当我在服务器上运行它时,它无法迭代任何东西。当我尝试在 getitem 中打印数据时,会显示

Traceback (most recent call last):
File "test.py", line 98, in <module>
print(fileDataSet[0])
File "/home/cjunjie/NLP/DocSummarization/dataset.py", line 32, in __getitem__
  print(abstracts)
UnicodeEncodeError: 'latin-1' codec can't encode character '\u22f1' in position 273: ordinal not in range(256)

我所做的是从PyTorch数据集中只包含整数和逗号的文件中读取数据:

def __getitem__(self, index):
    abstracts = np.genfromtxt(os.path.join(self.abstract_path, self.abstract_list[index]),
                              delimiter=',').astype(int)
    abstracts_length = abstracts[:, 0].flatten()

    print(abstracts) // It works

    abstracts = torch.LongTensor(abstracts[:, 1:])

    // Error
    print(abstracts)

    articles = np.genfromtxt(os.path.join(self.article_path, self.article_list[index]),
                             delimiter=',').astype(int)
    articles_length = articles[:, 0].flatten()
    articles = torch.LongTensor(articles[:, 1:])

    return {'abstracts_data': abstracts, 'abstracts_length': abstracts_length, 'articles_data': articles,
            'articles_length': articles_length}

所以看起来LongTensor有问题,但我不知道为什么会出错。

1 个答案:

答案 0 :(得分:0)

没有框架可用于测试它,但我的方法如下:

print(str(fileDataSet[0], encoding='utf-8', errors='ignore'))

当然它也可能不是utf-8,但你也可以改为另一种编码,忽略错误至少会让你打印字符串。

我的理解是它是由打印函数进行的字节字符串转换。

替代方案可能是直接使用bytes.decode(encoding =&#34; utf-8&#34;,errors =&#34; strict&#34;)(假设它是一个字节字符串)

相关问题