Argumentparser: Optional Argument With Optional Value
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.Argument
Solution 1:
With nargs='?'
, you can supply both a default
and const
.
In [791]: parser=argparse.ArgumentParser()
In [792]: parser.add_argument('--abc', nargs='?', default='default', const='const')
If the argument is not given it uses the default:
In [793]: parser.parse_args([])
Out[793]: Namespace(abc='default')
If given, but without an argument string, it uses the const:
In [794]: parser.parse_args(['--abc'])
Out[794]: Namespace(abc='const')
Otherwise it uses the argument string:
In[795]: parser.parse_args(['--abc','test'])
Out[795]: Namespace(abc='test')
In[796]: parser.print_help()
usage: ipython3[-h][--abc [ABC]]
optionalarguments:
-h, --helpshowthishelpmessageandexit--abc[ABC]
Solution 2:
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.
Solution 3:
Not sure if this is the standard way, but you can set default
argument to something , and then that value would be used in case --abc
is not in the argument list.
Example code -
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--abc', nargs='?', default="-1")
args = parser.parse_args()
print(args)
Result -
>python a.pyNamespace(abc='-1')
>python a.py--abcNamespace(abc=None)
>python a.py--abc something
Namespace(abc='something')
Post a Comment for "Argumentparser: Optional Argument With Optional Value"