如何修复argparse中parser.parse_args()抛出的SystemExit: 2错误?
argparse执行
parse_args()出现SystemExit:2错误的修复方案 错误原因
SystemExit:2是argparse模块的标准错误码,通常由以下情况触发:
- 命令行输入的参数不符合定义规则(比如传入不在
choices中的mode值、--epochs传入非整数) - 参数定义存在类型不兼容问题(比如
--epochs的type=int但default设为布尔值False) - 误用
parse_known_args()(该方法仅忽略未知参数,仍会验证已知参数的合法性)
修复步骤
1. 定位具体错误
在parse_args()外层包裹异常捕获,打印详细错误信息和帮助文档,快速定位问题:
parser = argparse.ArgumentParser() parser.add_argument("mode", help="Trains or tests the CNN", nargs="*", choices=["train", "continue", "test", "confusionmatrix", "vote", "slice"]) parser.add_argument("--resume", help="The version to continue training from", required=False, default=False) parser.add_argument("--epochs", help="The number of epochs to finish training from", type=int, required=False, default=False) try: args = parser.parse_args() except SystemExit as e: print(f"错误代码: {e.code}") parser.print_help() exit(e.code) print("args", args)
2. 修正参数类型冲突
你的--epochs参数指定了type=int,但default设为布尔值False,存在类型不兼容问题。将default改为整数类型:
parser.add_argument("--epochs", help="The number of epochs to finish training from", type=int, required=False, default=0)
3. 正确使用parse_known_args()
如果是因为传入未定义参数导致错误,才需要用该方法,且用法要正确:
args, unknown = parser.parse_known_args() print("已知参数:", args) print("未知参数:", unknown)
注意:该方法仍会验证已知参数的合法性,若错误来自已知参数的类型或choices问题,它同样会抛出SystemExit。
4. 规范命令行输入
确保运行脚本时的参数符合定义规则:
mode只能传入choices列表中的值,可传0个或多个--epochs必须传入整数- 可选参数(
--resume、--epochs)可放在位置参数前后,示例:# 不传mode,仅传可选参数 python your_script.py --resume v1 --epochs 10 # 传入多个mode值 python your_script.py train test --epochs 20
内容的提问来源于stack exchange,提问作者yuvi
相关产品推荐
相关产品推荐

