【发布时间】:2015-10-27 05:37:54
【问题描述】:
如果我有一个带有可选参数值的可选参数,有没有办法在没有给出值时验证参数是否设置?
例如:
parser = argparse.ArgumentParser()
parser.add_argument('--abc', nargs='?')
args = parser.parse_args()
会正确地给我:
optional arguments:
--abc [ABC]
如何区分下面的1和2?
- '' => args.abc 为无
- '--abc' => args.abc 仍然是 None
- '--abc something' => args.abc 是什么东西
...
更新:
找到解决此问题的技巧:您可以使用“nargs='*'”而不是“nargs='?'”。这样 #1 将返回 None,而 #2 将返回一个空列表。缺点是这也将允许参数的多个值被接受;所以你需要在适当的时候添加一个检查。
或者,您也可以为参数设置默认值;请参阅 chepner 和 Anand S Kumar 的回答。
【问题讨论】:
-
请注意,您可以使用 vars(args) 将 Namespace 转换为 dict 并在脚本中检查以确定 args 的设置方式。