Python运行argparse参数解析代码出现必填参数缺失报错如何解决
报错原因
- 运行环境不匹配
报错日志里出现ipykernel_launcher.py说明你是在Jupyter、IPython这类交互式内核环境下直接运行代码。argparse默认会读取系统进程的命令行参数,而这类交互式环境启动时传递的是内核自身的参数,不会携带你脚本需要的自定义参数,所以检测不到必填参数就会报错。 - 运行代码与预期不符
你贴出的代码里没有定义-p/--prototxt参数,但报错里明确提示该参数为必填项,说明你实际运行的代码和你贴出的版本不一致:要么是你修改代码后未重新加载运行,要么是运行的是其他包含该参数定义的脚本文件。
解决方法
- 方案1:命令行直接运行脚本
在终端执行脚本时传入所有必填参数即可,示例命令如下:
python train.py -i 你的输入图片路径 -d 你的数据集路径 -m 你的Caffe模型路径 -l 你的标签文件路径
如果确认代码中确实需要-p/--prototxt参数,就在命令中补充该参数对应的prototxt文件路径即可。
- 方案2:适配交互式环境运行
如果你需要在Jupyter/IPython环境下调试代码,选其中一种方法修改即可:- 手动给
parse_args传入参数列表,替换原有参数解析行:
# 把列表里的路径换成你实际的文件路径 args = vars(ap.parse_args(args=['-i', './input.jpg', '-d', './dataset', '-m', './model.caffemodel', '-l', './labels.txt']))- 给参数设置默认值,去掉必填限制:
把所有required=True替换成default="你的默认路径",示例:
这样就算不传参数,也会自动使用你设置的默认值运行。ap.add_argument("-i", "--image", default="./input.jpg", help="path to input image") - 手动给
内容的提问来源于stack exchange,提问作者Durga Akhil Karakavalasa
相关产品推荐
相关产品推荐

