Разбор логических значений с помощью 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
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