#python #exception #command-line-arguments #argparse #optional-arguments
#python #исключение #аргументы командной строки #argparse #необязательно-аргументы
Вопрос:
Как я могу сгенерировать сообщение об ошибке, если при использовании argparse в коде в командной строке передается меньше необязательных аргументов, чем требуется? например, у меня есть 5 необязательных аргументов, и я хочу сгенерировать сообщение об ошибке, если одновременно используется менее 4 необязательных аргументов. Мой начинающий мозг не может этого понять.
import argparse
import math
parser = argparse.ArgumentParser(description='Loan Calculator')
parser.add_argument('--type', type=str)
parser.add_argument('--principal', type=int)
parser.add_argument('--periods', type=int)
parser.add_argument('--interest', type=float)
parser.add_argument('--payment', type=int)
args = parser.parse_args()
Комментарии:
1. Вам нужно как минимум четыре, но там не имеет значения, какие четыре из пяти вы получите? Я не уверен, что для этого есть поддержка (кажется невозможным правильно отображать в стандартном формате использования командной строки, не делая его безумно подробным, указывая каждую допустимую комбинацию 4 ). Я думаю, вы застряли в тестировании вручную, возможно, используя
argparse
средства печати справки , чтобы помочь с созданием сообщения об использовании.2. Не имеет значения, какие четыре. если в командной строке передано менее четырех аргументов, должно отображаться «Неправильные параметры». У меня была идея указать все возможные комбинации, но я подумал, что может быть более простой способ.
3.
if len([k for k,v in args.__dict__.items() if v is not None]) < 4:
Ответ №1:
Это то, что наиболее просто обрабатывается после вызова parse_args
. Подсчитайте, сколько параметров по-прежнему имеют значение по умолчанию None
. Если их больше 1, возникает ошибка.
args = parser.parse_args()
if 1 < sum(1 for x in [args.type, args.principal, args.periods, args.interest, args.payment] if x is None):
sys.exit("Too few options specified")