我希望有3个可选的位置参数(int
,int
,然后是str
)。
我的要求:
$ ./args.py 0 100 vid
start=0
end=100
video='vid'
$ ./args.py 0 100
start=0
end=100
video=None
$ ./args.py 0
start=0
end=None
video=None
$ ./args.py vid
start=None
end=None
video='vid'
$ ./args.py
start=None
end=None
video=None
我尝试过的内容:
#!/usr/bin/python3
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('start', type=int, nargs='?')
parser.add_argument('end', type=int, nargs='?')
parser.add_argument('video', type=str, nargs='?')
print(parser.parse_args())
那段代码存在的问题是:
$ ./args.py vid
usage: args.py [-h] [start] [end] [video]
args.py: error: argument start: invalid int value: 'vid'
< p > argparse 知道 'vid' 不是整数,所以我希望它可以“跳过”前两个参数start
和end
,因为它们不匹配。
当我把video
参数设为强制性时,它的效果更好:
parser.add_argument('start', type=int, nargs='?')
parser.add_argument('end', type=int, nargs='?')
parser.add_argument('video', type=str)
演示:
# Fine!
$ ./args.py 0 100 vid
start=0
end=100
video='vid'
# Fine!
$ ./args.py vid
start=None
end=None
video='vid'
# Not fine
./args.py
usage: args.py [-h] [start] [end] video
args.py: error: the following arguments are required: video
type
不匹配时,argparse
会引发错误;它不会跳过该参数或继续尝试其他参数。像这样的位置值严格按位置而不是值分配。 - hpaulj