Python argparse如果不是int则跳过 [英] Python argparse skip if not int
本文介绍了Python argparse如果不是int则跳过的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想有3个可选的位置参数(int
,int
,然后是str
).
I would like to have 3 optional positional arguments (int
, int
, then 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'
argparse 知道值'vid'不是整数,所以我希望它跳过"两个第一个参数start
和end
,因为它们不匹配.
argparse knows that the value 'vid' is not an integer, so I would like it to "skip" the two first arguments start
and end
since they don't match.
当我强制使用video
参数时,它的效果会更好:
When I make the video
argument mandatory, it works a bit better:
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
我认为,
推荐答案
没有干净的内置方法可以做到这一点.因此,您只需要将所有选项收集到一个列表中,然后自己解析它们即可.
There is no built-in way to do this cleanly, I think. Thus, you'll just have to gather all of the options into a list and parse them out yourself.
例如
parser.add_argument('start_end_video', nargs='*')
args=parser.parse_args()
if len(args.start_end_video) == 1:
video = args.start_end_video
elif len(args.start_end_video) == 3:
start, end, video = args.start_end_video
等
这篇关于Python argparse如果不是int则跳过的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文