有没有办法在python的argparse中设置定界符?

时间:2019-05-06 10:19:55

标签: python argparse

我正在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个双数的方法。

1 个答案:

答案 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

但是,这可能会使意想不到的用户感到困惑,因为这种使用选项的灵活性是如此之多,以至于不允许这样做是很奇怪的。尤其是因为错误消息根本没有指出这一点。