Как установить значение по умолчанию для взаимоисключающей переменной, но отключить ее, если аргумент не указан?

Я новичок в 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)

Ожидаемое поведение:

  1. Можно установить не более одного из a и b.

  2. Если ни a, ни b не установлены, a должно быть по умолчанию равно 1, а b должно быть None.

  3. Если установлены a или b, другое значение должно быть None.

Однако, даже если я укажу task.py --b 10, он все равно установит значение a равным 1.

Я проверил этот ответ: Установите значение по умолчанию в false, если другой взаимоисключающий аргумент истинен, но это делает разные вещи. Он хочет, чтобы значение было значением по умолчанию (т. е. 1 здесь), а не None, когда установлено b.

Любая помощь приветствуется. Большое спасибо!


person user2830451    schedule 05.03.2019    source источник
comment
Значения по умолчанию не меняются только потому, что аргумент находится во взаимоисключающей группе. Все, что делает группа, — это держит вас в напряжении, используя оба аргумента одновременно. То есть '--a 2 --b 4' должно вызывать ошибку, вот и все. В противном случае '--a' и '--b' получают значения по умолчанию или значения, указанные в их определении.   -  person hpaulj    schedule 06.03.2019
comment
default=argparse.SUPPRESS можно использовать для хранения атрибута вне пространства имен, если он не указан. Но имейте в виду, что значение по умолчанию None является надежным индикатором аргумента, который не использовался. Пользователь не может установить это значение.   -  person hpaulj    schedule 06.03.2019
comment
Не могли бы вы уточнить, пожалуйста? Проблема в том, что я хочу, чтобы для a было установлено значение 1, если и a, и b не установлены явно. Но если установлено b, я хочу, чтобы значение по умолчанию не срабатывало, т. е. a должно быть None.   -  person user2830451    schedule 06.03.2019
comment
Любое взаимодействие между значениями b и a, по умолчанию или нет, лучше всего выполнять после синтаксического анализа.   -  person hpaulj    schedule 06.03.2019