gpt4 book ai didi

python - argparse 是否支持多个独占参数?

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:56 24 4
gpt4 key购买 nike

假设我有两组参数。您可以使用每个组中任意数量的参数,但不能在组之间混合使用参数。

有没有办法在 argparse 中自定义冲突参数?模块?我试过使用方法 add_mutually_exclusive_group但这不是我要找的。

最佳答案

我提出了一个补丁(或者更确切地说是补丁),可以让您测试参数的一般逻辑组合。 http://bugs.python.org/issue11588

我的想法的核心是在 parse_args 中添加一个钩子(Hook),让用户测试参数的所有逻辑组合。此时它可以访问列表 seen 参数。此列表在 parse_args 之外对您不可用(因此需要一个钩子(Hook))。但是通过适当的 defaults,您可以编写自己的使用 args 命名空间的测试。

实现通用 argparse 版本的困难包括:

a) 实现某种嵌套组(在你的例子中,多个 any 组嵌套在一个 xor 组中)

b) 在有意义的 usage 行中显示这些组

目前,您最好的选择是使用子解析器实现您的问题(如果适用),或者在解析后进行您自己的测试。并编写您自己的用法

这是一个可在解析后应用于 args 命名空间的通用测试的草图

def present(a):
# test whether an argument is 'present' or not
# simple case, just check whether it is the default None or not
if a is not None:
return True
else:
return False

# sample namespace from parser
args = argparse.Namespace(x1='one',x2=None,y1=None,y2=3)

# a nested list defining the argument groups that need to be tested
groups=[[args.x1,args.x2],[args.y1,args.y2]]

# a test that applies 'any' test to the inner group
# and returns the number of groups that are 'present'
[any(present(a) for a in g) for g in groups].count(True)

如果 count 为 0,则没有找到任何组,如果 1 找到一个组,等等。我提到的 hook在错误问题中进行相同类型的测试,只是使用不同的 present 测试。

正常的互斥测试会反对如果计数>1。所需的组会反对 0 等。您也可以执行类似

的操作
if (present(args.x1) or present(args.x2)) and 
(present(args.y1) or present(args.y2)):
parser.error('too many groups')

即。 anyallandor 的一些组合。但是 count 是处理 xor 条件的好方法。

关于python - argparse 是否支持多个独占参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29921862/

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