«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как правильно анализировать логические значения в argparse?

Как правильно анализировать логические значения в argparse?

Опубликовано 23 ноября 2024 г.
Просматривать:857

How Can I Parse Boolean Values Correctly in argparse?

Разбор логических значений с помощью argparse

В argparse анализ логических аргументов командной строки является распространенной задачей, но при попытке для анализа таких значений, как «--foo True» или «--foo False», используя аргумент type=bool. Удивительно, но даже при использовании пустой строки в качестве аргумента (например, "--foo " ") проанализированное значение оценивается как True.

Для правильного логического анализа argparse предлагает два рекомендуемых подхода:

Канонический подход:

Используйте '--feature' и Синтаксис '--no-feature', изначально поддерживаемый argparse. В Python 3.9 и выше:

parser.add_argument('--feature', action=argparse.BooleanOptionalAction)

В версиях Python ниже 3.9:

parser.add_argument('--feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)

При таком подходе наличие '--feature' устанавливает значение True, а '--no-feature' устанавливает значение False. Отсутствие любого из аргументов по умолчанию равно True.

Необязательный подход (с использованием преобразования типов):

Если требуется синтаксис «--arg » , можно использовать пользовательские функции преобразования типов. Одним из примеров является ast.literal_eval:

parser.add_argument("--arg", type=ast.literal_eval)

В качестве альтернативы можно создать пользовательскую функцию:

def true_or_false(arg):
    ua = str(arg).upper()
    if 'TRUE'.startswith(ua):
       return True
    elif 'FALSE'.startswith(ua):
       return False
    else:
       raise argparse.ArgumentTypeError('Invalid boolean value')
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3