Python argparse互斥组内多参数条件依赖配置方法
实现方案
argparse 原生的互斥组不支持直接为组内参数配置依赖必填规则,按如下方式调整代码即可完全匹配你的参数规则:
- 首先手动指定
usage文案,和你预期的命令行提示保持一致 - 新增
--num_vids参数,初始不标记为必填(因为选择视频链接模式时不需要该参数) - 完成基础参数解析后增加自定义校验:如果检测到传入了
--channel_link但未传入--num_vids,调用parser自带的error()方法抛出标准化的参数错误,和原生报错体验完全一致
调整后完整代码
import argparse parser = argparse.ArgumentParser( description='A Python script to download Youtube videos', usage='main.py [-h] [--video_link video | --channel_link channel --num_vids num ]' ) group_ = parser.add_mutually_exclusive_group() group_.add_argument('--video_link', metavar='video', type=str, help='Enter the video url') group_.add_argument('--channel_link', metavar='channel_link', type=str, help='Enter the name of the channel') # 新增num_vids参数 parser.add_argument('--num_vids', metavar='num', type=int, help='Required when using channel link, specify the number of videos to download') args = parser.parse_args() # 自定义校验逻辑:channel_link存在时num_vids必填 if args.channel_link and args.num_vids is None: parser.error("--channel_link requires the --num_vids argument") video_link = args.video_link channel_link = args.channel_link num_vids = args.num_vids print(video_link, channel_link, num_vids)
校验规则说明
- 传入
--video_link参数时,无需携带--num_vids即可正常运行 - 传入
--channel_link但未携带--num_vids时,会自动打印错误提示和usage说明,退出码和原生参数错误一致 - 同时传入
--video_link和--channel_link时,会触发互斥组原生报错 - 两个链接参数都不传时,也会触发原生的参数缺失报错
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

