Win10 Anaconda Jupyter运行RNN训练脚本遇argparse及TypeError报错咨询
问题解决步骤
一、修复Jupyter Notebook环境下argparse必填参数报错
报错核心逻辑:Jupyter运行时,parse_args()默认读取的是ipykernel启动生成的系统参数列表,和脚本内自定义的参数校验逻辑不匹配。之前两次修改无效的根因:
- 给
add_argument加default但保留required=True的写法完全不解决问题:argparse的required校验和default值是独立的,只要参数标记为required=True,无论是否配置default,只要传入的参数列表里没有显式出现这个参数,就会触发必填缺失报错,default值仅对非required参数生效。 - 直接给
parse_args()传关键字参数的写法存在语法错误:parse_args()仅支持两种入参模式,要么不传参读取系统sys.argv,要么传入字符串形式的参数列表,原生签名为parse_args(args=None, namespace=None),传自定义关键字参数会直接触发类型错误,根本不会按预期传值。
可直接落地的修复方案
- 方案1:修改脚本内参数解析逻辑,在Jupyter环境下手动构造参数列表传入
parse_args(),替换原有空参调用:
路径前加args = parser.parse_args([ "-data_path", r"C:\Users\Firdaus\Desktop\data" ])r前缀规避Windows路径转义符的识别问题。 - 方案2:保留原脚本的参数定义不修改,在Jupyter单元格内用
%run魔法命令显式传参运行脚本,不要直接在单元格内import或逐行执行脚本代码:%run train_rnn_wdcnn_loads.py -data_path "C:\Users\Firdaus\Desktop\data"
二、修复命令行运行时TypeError: 'NoneType' object is not iterable报错
报错位置在cwru_data_loader.py第114行,遍历self.loads属性时触发,本质是调用CWRUBearingData类初始化时,漏传了loads参数的值,导致属性被设为类默认的None值,执行循环逻辑时触发类型不匹配错误。
可直接落地的修复方案
- 打开
C:\Users\Firdaus\AppData\Local\Programs\Python\Python38\lib\site-packages\utils\cwru_data_loader.py文件,定位到CWRUBearingData类的__init__构造方法,确认loads参数的位置和默认值(通常默认值为None)。 - 回到
train_rnn_wdcnn_loads.py第107行,补全CWRUBearingData的调用参数,传入符合CWRU数据集规范的负载列表(常见值为[0,1,2,3],对应0HP/1HP/2HP/3HP的电机负载工况),参考写法:source_data = CWRUBearingData( data_path, experiment, source, loads=[0, 1, 2, 3] ) - 额外校验脚本内
experiment、source变量的赋值结果,确认两个变量不是None值;同时检查数据路径下的文件层级,需符合cwru_data_loader的读取要求:正常按照数据根目录/实验编号/故障类型/负载值/的结构存放CWRU原始mat文件,避免后续读文件时触发路径不存在的报错。
内容的提问来源于stack exchange,提问作者dzdws
相关产品推荐
相关产品推荐

