Python中如何使用ArgParse读取列表参数?以下示例代码存在什么错误?
问题排查与ArgParse列表参数使用说明
错误原因
你代码触发unrecognized arguments报错的核心原因有两个:
- 定义
-i参数时没有指定nargs参数,argparse默认只会接收该参数后的1个输入值,后续传入的其他文件路径会被判定为未定义的位置参数,触发报错 - 错误设置
type=list:该配置会把单个输入的字符串路径拆分为单个字符组成的列表,完全不符合多文件读取的需求
正确读取列表类型命令行参数的方法
要接收多个同类型的参数并自动组装为列表,只需要在add_argument时配置nargs参数即可,常见配置选项:
nargs='+':要求至少传入1个参数,所有传入的参数会被组装为列表,适用于当前多输入文件的场景nargs='*':允许传入0个或多个参数,适合可选的列表类参数nargs=N(N为正整数):固定接收N个参数,组装为列表
修复后的代码
只需要修改-i参数的定义即可,以下是调整后的完整参数解析逻辑:
@classmethod def __parse_args(cls): # initialize argument parser my_parser = ArgumentParser() # 改动点:添加nargs='+',type设为str,添加required=True表示该参数为必传项 my_parser.add_argument("-i", help="multiple input files", type=str, nargs='+', required=True) my_parser.add_argument("-o", help="output directory", type=str, required=True) # 额外优化:根据变量命名调整type为int,同时设置默认值,无需后续单独赋值默认值 my_parser.add_argument("-n", help="percentage of data to split from tail", type=int, default=100) my_parser.add_argument("--pdf", help="PDF output", action='store_true') my_parser.add_argument("--png", help="PNG output", action='store_true') # parse the argument args = my_parser.parse_args() cls.__input_files_vector = args.i cls.__output_directory = args.o cls.__split_percentage_at_tail_int = args.n cls.__is_pdf_output = args.pdf cls.__is_png_output = args.png
修复后运行你原来的命令即可正常输出所有传入的文件路径列表,不会再出现参数未识别的报错。
内容的提问来源于stack exchange,提问作者user366312
相关产品推荐
相关产品推荐

