2016-11-30 47 views
0

如何添加一个可选参数,该参数具有默认值并且可以用另一个值调用或可以不带值调用(并且具有默认值)。 所以我有这样的说法Python argparse可选参数无参数(不存储为true)

parser.add_argument("-a", "--automatic", type=int, default=8) 

,我希望能够调用。 My_script.py -a如果我想要一个以8作为参数的自动模式,但是我也想要例如My_script.py -a 10,如果我想要一个自动模式以10(或任何其他数字)作为参数。 问题是,当我用My_script.py -a运行时,我得到预期的一个参数。如果我不想指定8,我也不允许指定-a,然后我必须运行My_script.py,这不是我想要的。

+0

如果通过没有任何事情等同于传递没有值的'-a',为什么允许后者?它只是使分析中的错误/歧义变得更容易。 'nargs ='?''类型的作品(当它发生时,你必须用'8'手动替换'None',因为如果没有参数提供,它不是默认情况,所以它存储'None'),但它是一个坏主意。 – ShadowRanger

+0

这似乎不明确。解析器应该如何判断'-a'之后的东西是否是'-a'选项的值或位置参数?无论argparse是否支持这一点,我认为这不是一个好的界面。 – user2357112

+0

用'nargs ='?''玩,并给它'默认'和'const'参数。 – hpaulj

回答

0

nargs='?'const=8。来自the documentation

ArgumentParser对象通常会将单个命令行参数与要执行的单个操作相关联。 nargs关键字参数将不同数目的命令行参数与单个操作相关联。

...

'?'。如有可能,将从命令行中消耗一个参数,并将其作为单个项目生成。如果没有命令行参数,将生成default的值。请注意,对于可选参数,还有一个额外的情况 - 选项字符串存在,但后面没有命令行参数。在这种情况下,将产生来自const的值。

+1

这还不够,你需要像'@hpaulj注意到的那样传递'const',或者传递没有值的switch来存储'None',而不是'default'的值。 – ShadowRanger

+0

你是对的,@ ShadowRanger。我已经更新了我的答案。感谢你和hpaulj的纠正。 – Chris