如何用Python ArgumentParser限制count与show参数二选一?
实现count与--show/-s参数的互斥限制
要实现用户只能二选一使用count位置参数或--show/-s可选参数,不能同时指定二者,可以借助argparse的**互斥参数组(mutually exclusive group)**来实现,具体修改如下:
parser = argparse.ArgumentParser( formatter_class=argparse.RawTextHelpFormatter, description="""some desc""", ) # 创建互斥参数组,确保组内参数只能指定一个 mutex_group = parser.add_mutually_exclusive_group() # 将count位置参数添加到互斥组 mutex_group.add_argument( "count", nargs="?", type=lambda n: max(int(n, 0), 1), default=1, ) # 将--show/-s参数添加到互斥组 mutex_group.add_argument( "--show", "-s", action="store_true", default=False, ) # --decode参数不受互斥限制,正常添加 parser.add_argument( "--decode", "-d", action="store_true", default=False, ) # 测试解析 args = parser.parse_args() print(args)
效果验证
- 单独指定
count:python script.py 5→ 解析结果为Namespace(count=5, show=False, decode=False),正常生效 - 单独指定
--show/-s:python script.py -s→ 解析结果为Namespace(count=1, show=True, decode=False),正常生效 - 同时指定二者:
python script.py 5 -s→ 直接抛出错误:error: argument --show/-s: not allowed with argument count,符合预期限制 - 都不指定:
python script.py→ 使用默认值Namespace(count=1, show=False, decode=False),符合原逻辑
内容的提问来源于stack exchange,提问作者Kokomelom
相关产品推荐
相关产品推荐

