gpt4 book ai didi

具有 nargs 行为的 Python argparse 不正确

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:54 32 4
gpt4 key购买 nike

这是我的 argparse 示例 sample.py

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-p", nargs="+", help="Stuff")
args = parser.parse_args()
print args

python - 2.7.3

我希望用户在 -p 选项后提供一个由空格分隔的参数列表。例如,如果你运行

$ sample.py -p x y 
Namespace(p=['x', 'y'])

但我的问题是,当你运行

$ sample.py -p x -p y
Namespace(p=['y'])

既不在这里也不在那里。我想要以下之一

  • 向用户抛出异常,要求他不要使用 -p 两次,而只是将它们作为一个参数提供
  • 假设它是同一个选项并生成一个 ['x','y'] 列表。

我可以看到 python 2.7 两者都不做,这让我很困惑。我可以让 python 执行上面记录的两种行为之一吗?

最佳答案

Note: python 3.8 adds an action="extend" which will create the desired list of ['x','y']

要生成 ['x','y'] 的列表,请使用 action='append'。实际上它给了

Namespace(p=[['x'], ['y']])

对于每个 -p 它给出一个列表 ['x']nargs='+' 指定,但是 append 意味着将该值添加到命名空间已有的内容中。默认操作只是设置值,例如NS['p']=['x']。我建议查看文档中的 action 段落。

optionals 设计允许重复使用。它启用诸如 appendcount 之类的操作。通常用户不希望重复使用它们,或者对最后的值感到满意。 positionals(没有 -flag)不能重复(除非 nargs 允许)。

How to add optional or once arguments?有一些关于如何创建“不重复”参数的建议。一种是创建自定义 action 类。

关于具有 nargs 行为的 Python argparse 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19228516/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com