Почему argparse неправильно анализирует мой логический флаг? [дубликат]

этот вопрос уже есть ответ здесь:

Я пытаюсь использовать модуль argparse, чтобы моя программа Python принимала гибкие аргументы командной строки. Я хочу передать простой логический флаг и сказать True или False для выполнения соответствующих ответвление в моем коде.

учитывать следующее.

import argparse

parser = argparse.ArgumentParser(prog='test.py',formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-boolflag', type=bool, default=True)
parser.add_argument('-intflag' , type=int, default=3)
args = parser.parse_args()

boolflag = args.boolflag
intflag  = args.intflag


print ("Bool Flag is ", boolflag)
print ("Int Flag is ",  intflag)

когда я попытался выполнить его с python scrap.py -boolflag False -intflag 314 Я получил результат

Bool Flag is  True
Int Flag is  314

почему это?!! Кажется, что intflag правильно проанализирован, но логический флаг всегда анализируется как True даже если я упоминаю явно в аргументах командной строки, что я хочу, чтобы это было False.

где я ошибаюсь?

1 ответов


вы пытаетесь повернуть строку "False" в логическое:

>>> bool("False")
True

это не будет работать, потому что строка "False" является непустым значением. все непустые строки имеют True логическое значение.

использовать store_false действие вместо:

parser.add_argument('--disable-feature', dest='feature', 
                    action='store_false')

теперь, когда вы используете этот переключатель,False сохраняется, в противном случае по умолчанию:True (по action='store_false').