我正在python 3.6中设置argparser,我需要一个参数来定义2D平面中的范围,格式为'-2.0:2.0:-1.0:1.0'。
我试图定义如下:
parser = argparse.ArgumentParser()
parser.add_argument('-r', '--rect', type=str, default='-2.0:2.0:-2.0:2.0', help='Rectangle in the complex plane.')
args = parser.parse_args()
xStart, xEnd, yStart, yEnd = args.rect.split(':')
不幸的是,这导致
error: argument -r/--rect: expected one argument
python3 script.py --rect "-2.0:2.0:-2.0:2.0"
我正在寻找一种获取4个双数的方法。
答案 0 :(得分:2)
您可以将类型设置为float,nargs = 4,默认设置为[-2, 2, -2, 2]
,然后将其作为python3 testargp.py --rect -2 2 -2 2
运行。这样也可以防止用户遗漏参数,因为如果没有四个数字,则会出现错误。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-r', '--rect', type=float, nargs=4,
default=[-2, 2, -2, 2], help='Rectangle in the complex plane.')
args = parser.parse_args()
print(args.rect)
结果:
python3 script.py
[-2, 2, -2, 2]
python3 script.py --rect -12 12 -3 3
[-12.0, 12.0, -3.0, 3.0]
python3 script.py --rect -12 12 -3
usage: script.py [-h] [-r RECT RECT RECT RECT]
script.py: error: argument -r/--rect: expected 4 arguments
this answer中提供的一种替代方法是,在长选项的情况下显式使用=
符号,在短选项的情况下不使用空格:
python3 script.py -r '-2.0:2.0:-2.0:2.0'
usage: script.py [-h] [-r RECT]
script.py: error: argument -r/--rect: expected one argument
python3 script.py -r'-2.0:2.0:-2.0:2.0'
-2.0:2.0:-2.0:2.0
python3 script.py --rect '-2.0:2.0:-2.0:2.0'
usage: script.py [-h] [-r RECT]
script.py: error: argument -r/--rect: expected one argument
python3 script.py --rect='-2.0:2.0:-2.0:2.0'
-2.0:2.0:-2.0:2.0
但是,这可能会使意想不到的用户感到困惑,因为这种使用选项的灵活性是如此之多,以至于不允许这样做是很奇怪的。尤其是因为错误消息根本没有指出这一点。