Как указать минимальное или максимальное значение с плавающей запятой с помощью argparse - PullRequest
0 голосов
/ 24 марта 2019

Как я могу указать минимальный или максимальный аргумент с плавающей точкой, используя argprase? Я хотел бы иметь возможность предоставить аргумент командной строки между минимальным и максимальным значением с плавающей запятой.

Ближайшая вещь, которую я могу найти, - это опция choices в add_argument(), но она указывает только допустимые значения для аргумента.

parser.add_argument("L", type=float, choices=range(2))

Аргумент командной строки 0.5 для L завершается неудачно:

invalid choice: 0.5 (choose from 0, 1)

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Вы можете (и должны) использовать функцию пользовательского типа. Это намного удобнее для пользователя.

def range_limited_float_type(arg):
    """ Type function for argparse - a float within some predefined bounds """
    try:
        f = float(arg)
    except ValueError:    
        raise argparse.ArgumentTypeError("Must be a floating point number")
    if f < MIN_VAL or f > MAX_VAL:
        raise argparse.ArgumentTypeError("Argument must be < " + str(MAX_VAL) + "and > " + str(MIN_VAL))
    return f



parser.add_argument(
    '-f',
    '--float',
    type=range_limited_float_type,
    help='Your argument description'
)
0 голосов
/ 26 марта 2019

После того, как вы поиграете с этим, самый простой ответ - обработать проверку входных данных командной строки минимальных или максимальных значений за пределами argprase.

Это оставляет написание функции и условия для проверки значения с плавающей запятой,Выйдите из программы, если условие выполнено:

import sys

# function to print error to stderr
def eprint(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs

# input validation
if args.L <=0:
    eprint("Input error. Length is less than 0. Please enter a positive length. Exiting.")
    sys.exit(1)
...