argparse store false, если не указано - PullRequest
74 голосов
/ 20 ноября 2011
parser.add_argument('-auto', action='store_true')

Как сохранить false, если -auto не указано? Я слабо помню, что таким образом он хранит None, если не указано

Ответы [ 4 ]

123 голосов
/ 20 ноября 2011

Опция store_true автоматически создает значение по умолчанию False .

Аналогично, store_false по умолчанию будет True , если аргумент командной строки отсутствует.

Источник этого поведения лаконичен и ясен: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861

В argparse документы не ясны по теме, поэтому я обновлю их сейчас: http://hg.python.org/cpython/rev/49677cc6d83a

9 голосов
/ 20 ноября 2011

С

import argparse
parser=argparse.ArgumentParser()
parser.add_argument('-auto', action='store_true', )
args=parser.parse_args()
print(args)

работает

% test.py

выходы

Namespace(auto=False)

По-видимому, по умолчанию он хранит False.

0 голосов
/ 09 июня 2019

Раймонд Хеттингер уже отвечает на вопрос ОП.

Однако в моей группе возникли проблемы с читабельностью при использовании store_false. Особенно, когда новые члены присоединяются к нашей группе. Это связано с тем, что наиболее интуитивно понятно, что когда пользователь указывает аргумент, значение, соответствующее этому аргументу, будет равно True или 1.

Например, если код -

parser.add_argument('--stop_logging', action='store_false')

Считыватель кода может ожидать, что оператор ведения журнала будет отключен, если значение в stop_logging равно true. Но код, подобный следующему, приведет к напротив желаемого поведения -

if not stop_logging:
    #log

С другой стороны, если интерфейс определен следующим образом, тогда оператор if работает и более интуитивно понятен -

parser.add_argument('--stop_logging', action='store_true')
if not stop_logging:
    #log
0 голосов
/ 01 июня 2015

store_false по умолчанию будет 0 по умолчанию (вы можете проверить, чтобы проверить). Чтобы изменить значения по умолчанию, просто добавьте default=True к вашему объявлению.

Так что в этом случае: parser.add_argument('-auto', action='store_true', default=True)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...