Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
07 Июл 2023
2 мин
119

Разбор булевых значений с argparse в Python

Одна из распространенных проблем, с которой сталкиваются разработчики на Python, связана с разбором булевых значений из командной строки с помощью библиотеки

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

python my_program.py --my_boolean_flag False

При попытке использовать argparse для разбора этих значений могут возникнуть проблемы. Вот типичный пример кода:

import argparse

parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)

cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse_args(cmd_line)

В этом случае, несмотря на то, что в командной строке указано значение «False», parsed_args.my_bool будет равно True. Это происходит из-за того, что любая непустая строка в Python воспринимается как True. Таким образом, «False» преобразуется в True.

Чтобы корректно обрабатывать булевые значения с помощью argparse, можно воспользоваться следующим решением:

import argparse

def str2bool(v):
    if isinstance(v, bool):
        return v
    if v.lower() in ('yes', 'true', 't', 'y', '1'):
        return True
    elif v.lower() in ('no', 'false', 'f', 'n', '0'):
        return False
    else:
        raise argparse.ArgumentTypeError('Boolean value expected.')

parser = argparse.ArgumentParser()
parser.add_argument('--my_bool', type=str2bool)

В этом примере функция str2bool преобразует строковое представление булевых значений в соответствующие булевые значения. Если значение не может быть интерпретировано как булево, то возникает ошибка. Эта функция используется в качестве типа для аргумента --my_bool, что позволяет корректно обрабатывать булевые значения, переданные через командную строку.

Это решение позволяет обрабатывать все стандартные представления булевых значений, включая «True», «False», «T», «F» и их варианты в нижнем регистре.

Добавить комментарий