使用argparse定义参数运行Python代码报SystemExit 2错误如何解决
报错根本原因
你在定义-m/--mode参数时指定了required=True,将其设为了必填命令行参数,运行脚本时没有传入该参数,argparse模块检测到必填参数缺失就会主动抛出该错误并终止程序,返回系统退出码2。
排查思路
- 核对执行脚本的完整命令,确认是否漏加
-m或--mode参数,直接执行python 脚本名.py不会自动传入你自定义的参数。 - 如果是在PyCharm、VSCode等IDE中直接点击运行按钮执行代码,IDE默认不会携带自定义命令行参数,需要检查运行配置中是否添加了对应参数。
- 可以在解析参数前添加代码打印实际传入的参数列表,确认argparse接收的参数是否符合预期:
import sys print(sys.argv)
解决方法
方法1:命令行运行时主动传参
执行脚本时带上mode参数,合法取值为train或test,参考命令:
# 训练模式示例 python 你的脚本文件名.py -m train # 测试模式示例,可搭配权重参数使用 python 你的脚本文件名.py -m test -w ./weights/训练好的权重文件路径
方法2:配置IDE运行参数
- PyCharm:右上角打开当前脚本的「编辑配置」页面,在「参数/Parameters」输入框中填入
-m train后保存即可。 - VSCode:打开对应运行配置的
launch.json文件,在配置项的args数组中添加"-m", "train"。
方法3:临时调试修改参数配置
如果是本地调试阶段不想每次传参,可以暂时把required=True改为required=False,同时添加默认值,调试完成后再改回必填即可:
parser.add_argument('-m', '--mode', type=str, required=False, default="train", help='either "train" or "test"')
注意:你代码里的
"是HTML转义字符,实际写代码时要替换为正常的双引号或单引号。
内容的提问来源于stack exchange,提问作者Ahead
相关产品推荐
相关产品推荐

