Python 如何使用argparse在没有默认值的情况下指定可选的非布尔参数?
我想实现以下目标Python 如何使用argparse在没有默认值的情况下指定可选的非布尔参数?,python,python-3.x,argparse,Python,Python 3.x,Argparse,我想实现以下目标 参数具有类型float 如果未在命令行上传递,则参数名称不应在从解析器获得的命名空间中显示为键 到目前为止,我只能这样做 parser.add_argument('--exponential-decay', type=float, required=False, help='Decay parameter for exponential decay', metavar='GAMMA') 这会导致“指数衰减”:在变量(parser.p
- 参数具有类型
float
- 如果未在命令行上传递,则参数名称不应在从解析器获得的
命名空间中显示为键
parser.add_argument('--exponential-decay', type=float, required=False,
help='Decay parameter for exponential decay', metavar='GAMMA')
这会导致“指数衰减”:在变量(parser.parse_args())
中不会出现任何。我也可以利用这些信息,但我很好奇这是否可以做到
我在argparse
文档中没有看到任何涉及此用例的内容。将默认值设置为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)
如果命令行参数不存在,则提供default=argparse.SUPPRESS不会导致添加任何属性:
要在每个选项上执行此行为:ArgumentParser(argument\u default=argparse.SUPPRESS)