【发布时间】:2014-05-03 08:39:10
【问题描述】:
我有一个字典,它将人类可读的值映射到三个不同的 Python 特定值。 argparse Python 模块如何在用户可以在键之间进行选择的同时使用此字典来获取特定值。
目前我有这个:
def parse(a):
values = { "on": True, "off": False, "switch": None }
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--value", choices=values, default=None)
args = parser.parse_args(a)
print("{}: {}".format(type(args.value), args.value))
>>> parse(['-v', 'on'])
<type 'str'>: on
>>> parse(['-v', 'off'])
<type 'str'>: off
>>> parse(['-v', 'switch'])
<type 'str'>: switch
>>> parse([])
<type 'NoneType'>: None
问题是,如果给定参数,argparse 不会返回True、False 或None。有没有简单的方法来添加这个功能?当然,之后我可以执行这样的操作:
args.value = values[args.value]
这实际上是我目前正在做的事情,但这不适用于默认值(我必须检查该值是否已经为 None 或将默认值设置为 "switch")。而且由于我多次使用它,所以我每次都必须这样做。
【问题讨论】:
-
指定
type=values.__getitem__就可以了。不过,不知道这是否是一个好的解决方案;我现在睡眠不足,所以我不知道我是否有好的想法。 -
设置`default='switch'有问题吗?预先指定默认选项是一种很好的做法。
标签: python dictionary argparse