gpt4 book ai didi

python - 仅当未出现参数时,才使用默认值进行 Argparse 追加操作

转载 作者:行者123 更新时间:2023-12-04 12:24:59 25 4
gpt4 key购买 nike

我正在使用 argparse 解析我的程序中的 CLI 参数图书馆。我想解析一个可以重复的参数,具有以下行为:

  • 如果参数至少出现一次,它的值存储在一个列表中,
  • 如果参数未出现,则值为某个默认列表。

  • 到目前为止,我有以下代码:
    import argparse
    ap = argparse.ArgumentParser(description="Change channel colours.")
    ap.add_argument('-c', '--channel', action='append', default=['avx', 'fbx'])
    print(ap.parse_known_args(['-c', 'iasdf', '-c', 'fdas']))
    print(ap.parse_known_args())

    这适本地设置了一个默认列表,但是当参数出现时它不会以空列表开头。换句话说,第二个 print语句打印正确的值(默认列表),但第一个打印
    ['avx', 'fbx', 'iasdf', 'fdas']

    代替
    ['iasdf', 'fdas']
    argparse有办法吗?做我想做的事而不做类似的事情
    if len(args.channel) > 2:
    args.channel = args.channel[2:]

    事后?

    最佳答案

    有一个讨论此行为的错误/问题。我为此写了几篇文章。

    https://bugs.python.org/issue16399 argparse:附加操作与默认列表添加到列表而不是覆盖

    目前唯一的变化是文档,而不是行为。

    所有默认值都在解析开始时放置在命名空间中。对于普通操作,用户值会覆盖默认值。但是在追加的情况下,它们只是添加到已经存在的内容中。它不会尝试区分默认放置的值和以前的用户值。

    我认为最简单的解决方案是保留默认值,并在解析 None 后检查或空列表(我不记得是哪个),然后插入您的默认值。您不会因为在 argparse 中进行所有解析而获得加分。 .一点后期解析处理就可以了。

    关于python - 仅当未出现参数时,才使用默认值进行 Argparse 追加操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59662533/

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