Notebook在Colab抛KeyError,VSCode中陷入无限循环的问题求助
类似问题的排查与解决方法
我之前调试PyTorch DataLoader时遇到过完全一致的情况,分享下实际排查思路和解决办法:
核心原因推测
这种现象大概率和多进程数据加载的异常传递问题有关:当num_workers>0时,DataLoader会启动子进程加载数据,如果子进程中抛出的KeyError没有被正确捕获并传递到主进程,主进程会一直等待子进程返回数据,表现为无限循环;而且Notebook的单元格中断无法终止后台子进程,只能重启内核。
具体解决步骤
- 先切换到单进程调试:把
DataLoader的num_workers改成0,数据加载会在主进程运行,异常会直接抛出,能看到具体的KeyError信息,定位到哪个key缺失、出现在代码的哪一行。dataloader_train = torch.utils.data.DataLoader(dataset_train, batch_size=32, shuffle=True, num_workers=0, collate_fn=caption_collate_fn) - 检查数据集类的
__getitem__方法:确认有没有因找不到key而触发死循环的逻辑(比如写了while循环尝试获取key但未设置退出条件)。 - 排查自定义
collate_fn:caption_collate_fn里有没有处理batch时的循环逻辑?比如补全缺失数据时无限重试? - 换运行环境验证:把代码复制到普通
.py文件中运行,Notebook的多进程管理逻辑有时会屏蔽异常,普通脚本能正常抛出错误。 - 添加日志定位问题样本:在
COCO_Features的__getitem__方法里,每处理一个样本就打印当前索引和要访问的key,能看到程序是不是在反复处理某个样本,或是卡在了特定索引上。
内容的提问来源于stack exchange,提问作者Karan Nautiyal
相关产品推荐
相关产品推荐

