【Python3】【报错】- UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0x90 in position 614

1. 错误代码

import pickle
import gzip
# 载入数据集
def load_data(path):
    with gzip.open(path) as fp:
        # 下一行为报错代码
        training_data, valid_data, test_data = pickle.load(fp)
    return training_data, valid_data, test_data

path = '../data/MNIST/mnist.pkl.gz'
training_data, valid_data, test_data = load_data(path)

2. 错误信息

C:\Users\JON~1.SCO\AppData\Local\Temp/ipykernel_3568/1866706828.py in load_data(path)
     17 def load_data(path):
     18     with gzip.open(path) as fp:
---> 19         training_data, valid_data, test_data = pickle.load(fp)
     20     return training_data, valid_data, test_data
     21 

UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)

3. 错误分析

  • 原因:是由于Python 2Python 3不兼容的问题

4. 解决方案

  1. 方法1:换一个 Python版本Python 2的解析器(不推荐)
  2. 方法2:在pickle.load(fp)改为pickle.load(fp, encoding='latin1'),代码如下所示
training_data, valid_data, test_data = pickle.load(fp, encoding='latin1')

在这里插入图片描述

5. 参考资料

  1. stackoverflow:Pickle incompatibility of numpy arrays between Python 2 and 3

猜你喜欢

转载自blog.csdn.net/weixin_42279212/article/details/121456038