代码之家  ›  专栏  ›  技术社区  ›  oarfish

如何使用argparse指定没有默认值的可选非布尔参数?

  •  2
  • oarfish  · 技术社区  · 7 年前

    我想实现以下目标

    • 参数具有类型 float
    • 如果未在命令行上传递,则参数名称不应在 Namespace 从解析器获取

    到目前为止我只能这样做

    parser.add_argument('--exponential-decay', type=float, required=False,
                        help='Decay parameter for exponential decay', metavar='GAMMA')
    

    'exponential_decay': None vars(parser.parse_args()) . 我也可以利用这些信息,但我很好奇这是否可以做到。

    我什么也没看到 argparse

    1 回复  |  直到 7 年前
        1
  •  2
  •   hpaulj    7 年前

    将默认值设置为 SUPPRESS :

    In [637]: parser=argparse.ArgumentParser()
    In [638]: parser.add_argument('--exponential-decay', type=float,
         ...:                     help='Decay parameter for exponential decay', metavar='GAMMA',
         ...: default=argparse.SUPPRESS);
    
    In [640]: parser.parse_args([])
    Out[640]: Namespace()
    In [641]: parser.parse_args(['--exp=12'])
    Out[641]: Namespace(exponential_decay=12.0)
    

    https://docs.python.org/3/library/argparse.html#default

    如果提供default=argparse.SUPPRESS,则在命令行参数不存在时不会添加任何属性: