如何使用argprase
指定最小或最大浮点参数?我希望能够在最小和最大浮点值之间提供命令行参数。
我能找到的最接近的是choices
中的add_argument()
选项,但它只指定了参数的允许值。
parser.add_argument("L", type=float, choices=range(2))
L的命令行参数0.5
失败:
invalid choice: 0.5 (choose from 0, 1)
您可以(并且应该)使用自定义类型函数。它更加用户友好。
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'
)
在玩完这个之后,最简单的答案是处理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)