使用Argparse触发SystemExit:2错误,缺失必填命令行参数
解决argparse在Jupyter中报错“required: -m/--model, -c/--classes”的问题
哦,这个坑我踩过!你遇到的是argparse在Jupyter Notebook/Lab环境下的典型问题——毕竟Jupyter的运行方式和普通终端脚本不一样,argparse找不到你要传的-m和-c参数,自然就报错退出了。下面给你几个实用的解决方案,按需选就行:
方案一:调试阶段直接硬编码参数(最简单)
如果你只是在Jupyter里调试代码,不想折腾命令行参数,直接把args变量手动赋值就行,完全绕开argparse的参数解析:
# 替换原来的 args = vars(ap.parse_args()) args = { "model": "/绝对路径/或相对路径/你的训练模型文件", # 改成你实际的模型路径 "classes": "/绝对路径/或相对路径/你的类别标签文件", # 改成你的类别文件路径 "input": "/可选/视频文件路径" # 不需要的话可以删掉这一行 }
改完直接运行代码,argparse的参数要求就不会再干扰你了。
方案二:给parse_args传入自定义参数列表
如果你想保留argparse的逻辑,又要在Jupyter里运行,可以直接给parse_args()方法传一个模拟终端参数的列表,告诉argparse该用哪些参数:
# 替换原来的 args = vars(ap.parse_args()) args = vars(ap.parse_args([ "-m", "/你的模型文件路径", "-c", "/你的类别标签文件路径", # 要是需要指定视频输入,就加上下面两行 # "-i", "/你的视频文件路径" ]))
这样argparse就会用你传入的这些参数,不会去读取Jupyter启动时的系统参数了。
方案三:在终端中运行脚本(正式使用场景)
如果你的代码最终要在终端里运行,那完全不用改代码,只要把代码保存成.py文件(比如activity_recog.py),然后在终端里用下面的命令运行:
python activity_recog.py -m /你的模型路径 -c /你的类别文件路径 -i /可选视频路径
这是argparse设计的正常使用方式,不会出现参数缺失的错误。
为什么会出现这个错误?
简单说:当你在Jupyter里运行代码时,实际执行的是Jupyter的内核启动脚本ipykernel_launcher.py,它自己会带一些命令行参数。而你的argparse会把这些参数当成你脚本的参数来解析,但这些参数里没有-m和-c,所以就触发了“必填参数缺失”的错误,直接抛出SystemExit: 2退出了。
内容的提问来源于stack exchange,提问作者Shuvo
相关产品推荐
相关产品推荐

