Python 3.9+argparseпонятие
argparse.BooleanOptionalAction
действия
Действие для флага-переключателя: одна опция --feature создаёт пару --feature / --no-feature, которые ставят True и False.
Синтаксис
parser.add_argument('--feature', action=argparse.BooleanOptionalAction)
Решает классическую ошибку type=bool: bool('False') равно True, потому что непустая строка истинна, и '--flag False' включает флаг. Без указания default значение — None, а не False: так можно отличить «не задано» от «выключено», но проверка 'is False' промахнётся. Если нужен False по умолчанию, задайте default=False явно.
Примеры
import argparse
parser = argparse.ArgumentParser(prog='app')
parser.add_argument('--color', action=argparse.BooleanOptionalAction)
print(parser.parse_args([])) # → Namespace(color=None)
print(parser.parse_args(['--no-color'])) # → Namespace(color=False)
import argparse
parser = argparse.ArgumentParser(prog='app')
parser.add_argument('--flag', type=bool)
print(parser.parse_args(['--flag', 'False'])) # → Namespace(flag=True) — ловушка type=bool
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности