У меня очень похожий вопрос , но предоставленные решения не подходят, так как у меня немного другой вариант использования.Для простоты я адаптирую свой вопрос к уже отвеченному.
Можно ли проверить argparse выборов без учета регистра, без потери информации с учетом регистра?
import argparse
choices = ["ADASYN", "BorderlineSMOTE", "KMeansSMOTE"]
parser = argparse.ArgumentParser()
parser.add_argument("-p", choices=choices)
print(parser.parse_args(["-p", "adasyn"]))
это приводит к:
choices.py: error: argument -p: invalid choice: 'adasyn' (choose from 'ADASYN', 'BorderlineSMOTE', 'KMeansSMOTE')
Я, очевидно, мог бы использовать type.lower , но тогда мой список вариантов должен быть в нижнем регистре, и я теряю большую читабельность для -h (вывод справки).С другой стороны, я хочу, чтобы мой пользователь мог использовать разные регистры, если строка .lower () для обоих одинакова.
Решение , предоставленное @hpaulj (аналогичновопрос) не работает в моем случае.Это только позволяет вводу аргумента иметь произвольный регистр.Так что, если мой список выбора будет строчным, AdAsyN будет работать, но если я сохраню список выбора в CamelCase, заглавные буквы в списке выбора также должны быть заглавными для аргумента.
У кого-нибудь есть решение для меня, где я могу сохранить регистр своего списка выбора, полностью игнорируя регистр для пользовательского ввода?