如何解决Python下载MNIST数据集时的URLError[WinError10060]问题
解决MNIST数据集下载超时(WinError 10060)的方法
以下是几种可行的解决办法,按操作复杂度排序:
1. 手动下载本地读取
直接跳过代码中的自动下载步骤,手动获取数据集文件:
- 找到
mnist.pkl.gz格式的MNIST数据集文件,将其下载到和你的Python脚本同一目录下 - 重新运行代码,脚本会检测到本地已有文件,直接跳过下载逻辑,读取本地文件处理
2. 给下载逻辑添加重试与超时机制
修改原代码的下载部分,增加重试次数和超时限制,避免单次连接失败就报错:
import numpy as np import pickle, gzip, urllib.request, os.path from urllib.error import URLError url = "http://deeplearning.net/data/mnist/mnist.pkl.gz" filename = 'mnist.pkl.gz' if not os.path.isfile(filename): retry_times = 3 for attempt in range(retry_times): try: # 设置10秒超时,避免无限等待 urllib.request.urlretrieve(url, filename, timeout=10) break except URLError: if attempt == retry_times - 1: # 最后一次重试失败,抛出原错误 raise print(f"下载超时,正在重试第{attempt+2}次...") # 后续读取与处理代码保持不变 with gzip.open(filename, 'rb') as f: train_set, valid_set, test_set = pickle.load(f, encoding='latin1') train_X, train_y = train_set valid_X, valid_y = valid_set test_X, test_y = test_set # 打印信息代码...
3. 更换为国内镜像源
将原代码中的下载地址替换为国内可快速访问的MNIST镜像地址,解决跨网络访问延迟问题:
- 替换代码中的
url变量为国内镜像的mnist.pkl.gz文件地址 - 运行代码即可正常下载
4. 排查网络环境问题
- 测试本地网络是否能访问目标服务器,可尝试更换网络(如手机热点)重试
- 检查是否有防火墙、代理软件拦截了请求,临时关闭防火墙或配置urllib使用代理(若需):
# 配置代理示例,替换为你的代理地址和端口 proxy_handler = urllib.request.ProxyHandler({ 'http': 'http://your-proxy-address:port', 'https': 'https://your-proxy-address:port' }) opener = urllib.request.build_opener(proxy_handler) urllib.request.install_opener(opener) # 之后执行urlretrieve下载
内容的提问来源于stack exchange,提问作者user22058539
相关产品推荐
相关产品推荐

