为什么 argparse 不解析这些参数?
--foo 1 2 3 bar
使用
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='+')
parser.add_argument('bar')
出现以下错误:
error: too few arguments
如果我先传递 bar 参数,它会起作用:
bar --foo 1 2 3
现在,这本身并不算太糟糕。我可以先接受位置参数,只是这种行为与 argparse 为我们创建的帮助不一致,它指出 bar 应该放在最后:
usage: argparsetest.py [-h] [--foo FOO [FOO ...]] bar
那么如何使用一致的帮助文本来完成这项工作?
这是一个完整的 test program .
最佳答案
nargs='+'
告诉 argparse 将所有剩余的 args 收集在一起,因此包含 bar
。它没有神奇的方法来猜测您打算 bar
本身是一个有意义的参数,而不是 --foo
的参数的一部分。
文档中的示例引用了一个简单的 --foo
参数,而不是带有 nargs='+'
的参数。请务必了解其中的区别。
关于python - Argparse 位置参数和可选参数的顺序不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5854920/