我该如何使用argparse来指定一个可选的非布尔型参数而没有默认值?

时间:2018-10-29 18:20:15

标签: python python-3.x argparse

我想实现以下目标

  • 参数的类型为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 个答案:

答案 0 :(得分:2)

将默认设置为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会导致如果不存在命令行参数,则不会添加任何属性: