为什么argparse顺序与可选参数有关?

时间:2018-07-31 21:14:07

标签: python argparse

我有一些代码可以解析名为“ blah.py”的文件中的一些参数:

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('opt', nargs='?')
parser.add_argument('--bool', action='store_true')
parser.add_argument('value')

args = parser.parse_args()

如果我这样调用该文件:

blah.py a b --bool

它正常工作(opt ='a',value ='b',bool = True)。

但是,如果我以其他顺序调用它:

blah.py a --bool b

我希望得到相同的结果,但是argparse模块正在打印error: unrecognized arguments: b消息。这是argparse模块的错误吗?为什么会这样工作?在为脚本定义CLI时,如何避免遇到此类问题?

由于我的界面比示例复杂得多(具有子命令和更多的参数),因此我有多种方法来调用该界面,该界面要求某些参数对于某些调用是可选的,而对于其他调用则是必选的。我计划手动验证这些情况,并在错误调用parser.print_usage并退出。

1 个答案:

答案 0 :(得分:1)

您可能想看看argparser的“混合”选项

https://docs.python.org/3/library/argparse.html#intermixed-parsing

否则,位置参数始终位于可选参数之前。