如何使用python argparse进行aribtrary选择?

时间:2017-01-26 16:29:53

标签: argparse choice

我正在使用argparse,我试图使用choice来限制选项。

对于接受的值,我正在寻找以下格式的输入: NUMBER km, NUMBER m, NUMBER cm。例如:3493cm。只要数字以km,cm或m结尾,我就不在乎数字是多少。

我试过了:

parser.add_argument('-d','--distance',
                    choice=['*m','*km','*cm'])

那没有用。

作为学习python的努力的一部分,我决定编写一个小的单元转换脚本,从脚本中获取输入。

谢谢。

1 个答案:

答案 0 :(得分:0)

choices不能以这种方式使用。 argparse使用的测试是

astr in choices

匹配列表,元组,字典键中的字符串。一个专门的类可以匹配*模式,但是更高级。

choices的替代方法是编写自定义type函数。或者在解析后将该函数应用于该值。

您的首要任务是提出一个测试字符串是否符合您标准的功能

def mytest(astr):
    if astr ...:
        return astr
    else:
        raise ValueError('your message')

解析后运行

mytest(args.distance)

一旦你开始测试,我们就可以讨论将它包含在解析器中。