Python argparse如果不是int则跳过 [英] Python argparse skip if not int

查看:26
本文介绍了Python argparse如果不是int则跳过的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要 3 个可选的位置参数(intintstr).

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' 不是整数,所以我希望它跳过"前两个参数 startend 因为它们不匹配.

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

推荐答案

我认为你应该添加你的论点的名称:

I think you should add what your arguments are called:

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-s', '--start', type=int)
parser.add_argument('-e', '--end', type=int)
parser.add_argument('-v', '--video', type=str)

args = parser.parse_args()
for arg in vars(args):
    print(arg, '=', getattr(args, arg))

这样你就可以指定参数并且不会发生混淆:

That way you can specify the arguments and no confusion can occur:

$ ./args.py -s 0 -e 100 -v vid
start = 0
end = 100
video = vid
$ ./args.py -s 0 -e 100
start = 0
end = 100
video = None
$ ./args.py -s 0
start = 0
end = None
video = None
$ ./args.py -v vid
start = None
end = None
video = vid
$ ./args.py
start = None
end = None
video = None
$ ./args.py vid
usage: args.py [-h] [-s START] [-e END] [-v VIDEO]
args.py: error: unrecognized arguments: vid

注意:我在上面的参数中包含了短别名.例如.您可以调用 -s 而不是 --start.

Note: I have included short aliases in the arguments above. E.g. You can call -s instead of --start.

这篇关于Python argparse如果不是int则跳过的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆