报错TypeError: LesionDataset() takes no arguments的排查求助
问题排查与修复方案
核心问题清单
- 类定义顺序错误:你在实例化
LesionDataset之后才定义这个类,还错误地从datasets模块调用它(你的类根本不在该模块内) - 缩进错误:
__init__方法内的代码块没有缩进,Python会判定方法定义结束,导致__init__没有参数处理逻辑 - 方法名拼写错误:
__getiitem__应为__getitem__(多了一个字母i) - 继承错误:
dataset应该是对应的数据基类(比如PyTorch的torch.utils.data.Dataset),且你未导入该基类 - 逻辑错误:
img_dir是文件夹路径,不是列表,直接调用len(self.img_dir)和self.img_dir[idx]完全不成立,需要读取目录文件列表与CSV标签内容
修复后的代码示例
# 导入必要模块(以PyTorch数据集为例) from torch.utils.data import Dataset import os import pandas as pd # 先定义类,再实例化 class LesionDataset(Dataset): def __init__(self, img_dir, labels_fname): self.img_dir = img_dir # 读取CSV标签文件 self.labels_df = pd.read_csv(labels_fname) # 获取目录下的图片文件列表(可根据实际格式调整后缀) self.img_files = [f for f in os.listdir(img_dir) if f.endswith(('.png', '.jpg', '.jpeg'))] def __len__(self): # 返回数据集实际长度 return len(self.img_files) def __getitem__(self, idx): # 获取对应索引的图片路径 img_path = os.path.join(self.img_dir, self.img_files[idx]) # 这里需添加图片读取逻辑(比如用PIL/OpenCV) # image = Image.open(img_path).convert('RGB') # 从CSV中匹配对应标签(假设CSV含'image_id'和'label'列) img_name = self.img_files[idx] label = self.labels_df[self.labels_df['image_id'] == img_name]['label'].values[0] return img_path, label # 替换为实际读取的image对象与label # 直接实例化自定义类,不要从datasets模块调用 ds = LesionDataset('/content/data/img', '/content/data/img/train.csv') input, label = ds[0] print(input) print(label)
关键修复点解释
- 调整类定义顺序:必须先定义
LesionDataset类,再创建实例,避免模块调用错误 - 修正缩进:
__init__内的赋值语句需缩进,确保属于方法内部逻辑 - 修正方法名:
__getitem__是Python容器类必须实现的魔法方法,拼写错误会导致无法通过索引访问数据 - 修复数据逻辑:路径不能直接当作列表使用,需读取目录文件、解析CSV标签,建立图片与标签的对应关系
- 正确继承基类:如果是PyTorch数据集,必须继承
torch.utils.data.Dataset,否则无法兼容数据加载器等工具
内容的提问来源于stack exchange,提问作者Vennnnn
相关产品推荐
相关产品推荐

