Я новичок в argparse и не знаю, как установить значение по умолчанию для взаимной переменной. Особенно:
У меня есть две переменные, и только одна из них должна быть установлена. Например:
import argparse
PARSER = argparse.ArgumentParser()
GROUP = PARSER.add_mutually_exclusive_group()
GROUP.add_argument(
'--a',
type=int,
nargs='?',
const=1,
default=1)
GROUP.add_argument(
'--b',
type=int)
PARSER.set_defaults(train_pass=1)
Ожидаемое поведение:
Можно установить не более одного из a и b.
Если ни a, ни b не установлены, a должно быть по умолчанию равно 1, а b должно быть None.
- Если установлены a или b, другое значение должно быть None.
Однако, даже если я укажу task.py --b 10, он все равно установит значение a равным 1.
Я проверил этот ответ: Установите значение по умолчанию в false, если другой взаимоисключающий аргумент истинен, но это делает разные вещи. Он хочет, чтобы значение было значением по умолчанию (т. е. 1 здесь), а не None, когда установлено b.
Любая помощь приветствуется. Большое спасибо!
default=argparse.SUPPRESS
можно использовать для хранения атрибута вне пространства имен, если он не указан. Но имейте в виду, что значение по умолчаниюNone
является надежным индикатором аргумента, который не использовался. Пользователь не может установить это значение. - person hpaulj   schedule 06.03.2019b
иa
, по умолчанию или нет, лучше всего выполнять после синтаксического анализа. - person hpaulj   schedule 06.03.2019