我如何使用 python argparse 进行任意选择?

How can I have an aribtrary choice using python argparse?

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

对于可接受的值,我正在寻找以下格式的输入:NUMBERkm,NUMBERm,数字厘米。例如:3493cm。我不在乎数字是多少,只要它以公里、厘米或米结尾即可。

我试过:

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

那没用。

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

谢谢。

choices不能这样用。 argparse使用的测试是

astr in choices

匹配列表、元组、字典键中的字符串。专门的 class 可以匹配 * 模式,但那更高级。

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

您的首要任务是想出一个函数来测试字符串是否满足您的条件

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

解析后运行

mytest(args.distance)

一旦您的测试工作正常,我们就可以讨论将其包含在解析器中。