使用argparse构建参数解析器时出现SystemExit:2错误求助
解决Jupyter中argparse必填参数报错问题
嘿,我看你在Jupyter Notebook里用argparse构建参数解析器时碰到了这个必填参数的错误,这其实是Notebook的运行机制和普通命令行脚本不一样导致的,下面给你分析原因和解决办法:
问题重现
你的代码:
ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="path to input image to be OCR'd") ap.add_argument("-p", "--preprocess", type=str, default="thresh", help="type of preprocessing to be done, choose from blur, linear, cubic or bilateral") args = vars(ap.parse_args())
报错信息:
usage: ipykernel_launcher.py [-h] -i IMAGE [-p PREPROCESS]
ipykernel_launcher.py: error: 以下参数为必填项: -i/--image
发生异常,请使用%tb查看完整回溯信息。
SystemExit: 2
原因分析
argparse是为命令行脚本设计的工具,它会从终端启动脚本时的命令行参数里获取输入。但在Jupyter Notebook中,代码块是直接运行的,没有机会在命令行传入-i参数,所以parse_args()检测不到必填的-i参数,就抛出了SystemExit错误。
解决方案
根据你的使用场景,有几种不同的解决方式:
1. 临时测试:手动模拟命令行参数
如果你只是想快速测试代码,可以直接在parse_args()里传入模拟的参数列表,就像在终端输入命令一样:
ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="path to input image to be OCR'd") ap.add_argument("-p", "--preprocess", type=str, default="thresh", help="type of preprocessing to be done, choose from blur, linear, cubic or bilateral") # 模拟传入-i参数,替换成你实际的图片路径 args = vars(ap.parse_args(["-i", "your_image_path.jpg"]))
2. 灵活适配Notebook:允许手动输入参数
如果不想每次修改代码,可以把-i设为可选参数,然后在代码里判断是否需要手动输入路径:
ap = argparse.ArgumentParser() # 去掉required=True,让参数可选 ap.add_argument("-i", "--image", help="path to input image to be OCR'd") ap.add_argument("-p", "--preprocess", type=str, default="thresh", help="type of preprocessing to be done, choose from blur, linear, cubic or bilateral") args = vars(ap.parse_args()) # 如果没通过命令行传入参数,手动输入 if not args["image"]: args["image"] = input("请输入待OCR的图片路径:")
3. 回归命令行:保存为脚本运行
如果你的代码本来就是要作为命令行工具使用,那直接把代码保存成.py文件,比如ocr_script.py,然后在终端里运行:
python ocr_script.py -i path/to/your/image.jpg
这样就能正常传入-i参数,argparse也能正常工作了。
内容的提问来源于stack exchange,提问作者Murthy P
相关产品推荐
相关产品推荐

