Как я могу указать необязательный не логический параметр без значения по умолчанию с помощью argparse? - PullRequest
0 голосов
/ 29 октября 2018

Я хочу добиться следующего

  • параметр имеет тип 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 голосов
/ 29 октября 2018

Установите значение по умолчанию 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 не приводит к добавлению атрибута, если отсутствует аргумент командной строки:

...