如何调用给定Python代码中的get_data函数并解决config未定义报错
报错原因与修复方案
你遇到的报错是因为初始化Preprocess类时,没有提前定义传入的config对象,同时还有一个隐藏错误:传入的数据集名Cora是字符串类型,需要加引号,否则后续还会触发name 'Cora' is not defined报错。
修复步骤
步骤1:定义config对象
Preprocess初始化要求传入的config必须包含root_dir(数据集存储根路径)和batch_size(批次大小)两个属性,你可以用一个简单的自定义类生成config:
class Config: root_dir = './data/' # 路径末尾必须加斜杠,避免拼接后路径错误 batch_size = 32 # 可根据自身需求调整批次大小 config = Config()
步骤2:修正实例化调用参数
数据集名称是字符串类型,需要用单/双引号包裹,同时你在初始化Preprocess类时,内部已经自动调用过一次get_data,结果已经存储在实例属性中,无需重复调用。
完整可运行代码
from torch_geometric.datasets import Planetoid # 高版本PyG的DataLoader已迁移到torch_geometric.loader,旧版本可换回torch_geometric.data from torch_geometric.loader import DataLoader # 定义配置类 class Config: root_dir = './data/' batch_size = 32 config = Config() class Preprocess(): def __init__(self, config, d_name): self.root_dir = config.root_dir self.batch_size = config.batch_size self.num_classes, self.num_node_features, self.data_loader = self.get_data(d_name) def get_data(self, d_name): ''' d_name = 'Cora', 'CiteSeer', 'PubMed' ''' dataset = Planetoid(root=self.root_dir + d_name , name=d_name) return dataset.num_classes, dataset.num_node_features, DataLoader(dataset, batch_size = self.batch_size) # 正确实例化 f = Preprocess(config, 'Cora') # 直接读取已加载的结果 print("类别数:", f.num_classes) print("节点特征维度:", f.num_node_features) print("数据加载器:", f.data_loader) # 如果需要加载其他数据集,再手动调用get_data即可 # cite_num_classes, cite_features, cite_loader = f.get_data('CiteSeer')
注意事项
- 首次运行会自动下载对应数据集,需要保持网络正常
- 如果导入DataLoader报错,根据你的PyG版本调整导入路径即可
- 不要删除root_dir末尾的斜杠,否则会生成错误的存储路径,导致数据集重复下载
内容的提问来源于stack exchange,提问作者muhammad
相关产品推荐
相关产品推荐

