You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遇TypeError: getattr()属性名需为字符串,无法调用models目录模型求解决

解决TypeError: getattr(): attribute name must be string问题

问题原因

这个错误的核心是args.model的值不是字符串,大概率是运行代码时未通过命令行指定--model参数,导致args.model为None,而getattr()的第二个参数要求必须是字符串类型。

另外需要确认models目录结构是否正确:models文件夹下应有对应模型的.py文件(如brits.py、rits.py、rits_i.py),每个文件里都定义了Model类,这样getattr(models, args.model)才能正确加载对应模块。

解决方案

1. 正确运行代码(必须指定模型参数)

运行代码时,必须通过命令行传入--model参数,同时补充其他必填参数,示例命令:

python main.py --model brits --hid_size 64 --impute_weight 0.3 --label_weight 1.0

替换brits为你需要的模型(rits/rits_i),并根据需求调整hid_size、impute_weight、label_weight的值。

2. 优化参数解析(避免遗漏必填参数)

修改argparse部分,给--model添加required=True,强制用户必须传入该参数,同时添加帮助提示:

parser = argparse.ArgumentParser()
parser.add_argument('--epochs', type=int, default=1000)
parser.add_argument('--batch_size', type=int, default=32)
# 添加required=True和帮助提示
parser.add_argument('--model', type=str, required=True, help='指定要使用的模型,可选值:brits, rits, rits_i')
parser.add_argument('--hid_size', type=int)
parser.add_argument('--impute_weight', type=float)
parser.add_argument('--label_weight', type=float)
args = parser.parse_args()

3. 添加参数校验(提前拦截无效输入)

在run()函数开头添加校验逻辑,确保args.model是有效的模型名称:

def run():
    # 校验模型名称合法性
    valid_models = ['brits', 'rits', 'rits_i']
    if args.model not in valid_models:
        raise ValueError(f"无效的模型名称,可选值:{', '.join(valid_models)}")
    
    model = getattr(models, args.model).Model(args.hid_size, args.impute_weight, args.label_weight)
    # 后续代码...

4. 确认models目录结构

确保项目结构如下:

你的项目目录/
├── main.py
├── models/
│   ├── __init__.py  # 空文件即可,让Python识别为模块
│   ├── brits.py
│   ├── rits.py
│   └── rits_i.py
├── ...其他文件(utils.py、data_loader.py等)

每个模型文件(如brits.py)里必须包含Model类定义,示例结构:

# models/brits.py
class Model(nn.Module):
    def __init__(self, hid_size, impute_weight, label_weight):
        super(Model, self).__init__()
        # 模型初始化逻辑...
    
    def run_on_batch(self, data, optimizer=None, epoch=None):
        # 模型前向/训练逻辑...

内容的提问来源于stack exchange,提问作者goksu1903

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:20:36