ArgumentParser:具有可选值的可选参数 [英] ArgumentParser: Optional argument with optional value
问题描述
如果我有一个带有可选参数值的可选参数,有没有办法验证在未给出值时是否设置了参数?
例如:
parser = argparse.ArgumentParser()parser.add_argument('--abc', nargs='?')args = parser.parse_args()
会正确地给我:
可选参数:--abc [ABC]
我如何区分下面的 1 和 2?
- '' => args.abc 是无
- '--abc' => args.abc 仍然是 None
- '--abc something' => args.abc 是东西
...
更新:
找到了解决此问题的技巧:您可以使用nargs='*'"代替nargs='?'".这样 #1 将返回 None,而 #2 将返回一个空列表.缺点是这也将允许接受多个参数值;所以你需要在适当的时候添加一个检查.
或者,您也可以为参数设置默认值;请参阅 chepner 和 Anand S Kumar 的回答.
为选项使用不同的默认值.比较
<预><代码>>>>解析器 = argparse.ArgumentParser()>>>parser.add_argument('--abc', nargs='?', default="default")>>>parser.parse_args()命名空间(abc='default')>>>parser.parse_args(['--abc'])命名空间(abc=None)>>>parser.parse_args(['--abc', 'value'])命名空间(abc='value')我不确定在没有参数的情况下使用 --abc
时如何提供不同的值,缺少使用自定义操作而不是 nargs
争论.
If I have an optional argument with optional argument value, is there a way to validate if the argument is set when the value is not given?
For instance:
parser = argparse.ArgumentParser()
parser.add_argument('--abc', nargs='?')
args = parser.parse_args()
Would correctly give me:
optional arguments:
--abc [ABC]
How do I distinguish between 1 and 2 below?
- '' => args.abc is None
- '--abc' => args.abc is still None
- '--abc something' => args.abc is something
...
Update:
Found a trick to solve this problem: you can use "nargs='*'" instead of "nargs='?'". This way #1 would return None, and #2 would return an empty list. The downside is this will allow multiple values for the arguments to be accepted too; so you'd need to add a check for it if appropriate.
Alternatively you can also set a default value for the argument; see answer from chepner and Anand S Kumar.
Use a different default value for the option. Compare
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--abc', nargs='?', default="default")
>>> parser.parse_args()
Namespace(abc='default')
>>> parser.parse_args(['--abc'])
Namespace(abc=None)
>>> parser.parse_args(['--abc', 'value'])
Namespace(abc='value')
I'm not sure how you would provide a different value for when --abc
is used without an argument, short of using a custom action instead of the nargs
argument.
这篇关于ArgumentParser:具有可选值的可选参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!