ArgumentParser:具有可选值的可选参数 [英] ArgumentParser: Optional argument with optional value

查看:38
本文介绍了ArgumentParser:具有可选值的可选参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有一个带有可选参数值的可选参数,有没有办法验证在未给出值时是否设置了参数?

例如:

parser = argparse.ArgumentParser()parser.add_argument('--abc', nargs='?')args = parser.parse_args()

会正确地给我:

 可选参数:--abc [ABC]

我如何区分下面的 1 和 2?

  1. '' => args.abc 是无
  2. '--abc' => args.abc 仍然是 None
  3. '--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?

  1. '' => args.abc is None
  2. '--abc' => args.abc is still None
  3. '--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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆