如何实现Python脚本参数传递、filter筛选存入数组及错误处理?
实现带可选过滤的多参数传递Python脚本
需求说明
- 支持传递一个或多个
--arg命名参数 - 可选传递最多一个
--filter参数 - 若提供
--filter,将所有--arg参数与过滤规则匹配,仅保留符合规则的参数存入数组 - 若未提供任何
--arg(包括仅传--filter的情况),输出错误信息和语法帮助后退出
问题分析
你之前用mutually_exclusive_group的写法不对,这个组会强制--arg和--filter二选一,但实际需求是--arg为必填项,--filter是可选的附加参数,且--arg支持多次传入。
修正后的代码
import argparse import fnmatch def main(): parser = argparse.ArgumentParser(description='处理带可选过滤的多参数') # 允许多次传入--arg,结果自动存入列表 parser.add_argument('--arg', action='append', type=str, required=True, help='需要处理的参数,可多次传入') # 可选过滤参数,最多传一次 parser.add_argument('--filter', type=str, help='过滤规则(支持通配符*),可选') args = parser.parse_args() # 初始化结果数组 result_array = args.arg.copy() # 若提供过滤规则,执行匹配筛选 if args.filter: result_array = [item for item in args.arg if fnmatch.fnmatch(item, args.filter)] # 这里可替换为你的业务逻辑 print("匹配后的参数数组:", result_array) if __name__ == '__main__': main()
代码说明
--arg用action='append':每次调用--arg都会把对应值追加到列表,天然支持多次传入required=True直接让argparse校验--arg为必填项,省去手动判断--filter为普通可选参数,argparse默认限制最多传一次- 用
fnmatch处理通配符匹配,完美适配示例中*2*这类规则 - 最后根据是否存在过滤规则,生成最终结果数组
验证示例
- 执行
python script.py:argparse直接输出错误和帮助信息,提示--arg是必填项 - 执行
python script.py --arg string:结果数组为['string'] - 执行
python script.py --arg string1 --arg string2 --arg string3:结果数组为['string1', 'string2', 'string3'] - 执行
python script.py --arg string1 --arg string2 --arg string3 --filter '*2*':结果数组为['string2']
内容的提问来源于stack exchange,提问作者skeetastax
相关产品推荐
相关产品推荐

