Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python configargparse:有没有办法从configargparse中将多个值检查为单个参数?_Python - Fatal编程技术网

Python configargparse:有没有办法从configargparse中将多个值检查为单个参数?

Python configargparse:有没有办法从configargparse中将多个值检查为单个参数?,python,Python,我正在用Python解析命令行参数。一个参数尤其应该包含两个数值:第一个值应该大于第二个值,两个值都不应该为负,第二个值不应该为零。我原本以为checker函数作为ArgumentParser的类型传递。添加参数的add_argument函数可以工作,但后来意识到类型对每个给参数的值单独操作,而不是在一个组中操作 如何从configargparse本身执行此操作?在事后编写一个函数来检查这一点很容易,但是这个参数可能会在代码中的多个位置使用,因此如果它可以检查自己,而不是让外部的东西来做,那就太

我正在用Python解析命令行参数。一个参数尤其应该包含两个数值:第一个值应该大于第二个值,两个值都不应该为负,第二个值不应该为零。我原本以为checker函数作为
ArgumentParser的
类型
传递。添加参数的add_argument
函数可以工作,但后来意识到
类型
对每个给参数的值单独操作,而不是在一个组中操作

如何从
configargparse
本身执行此操作?在事后编写一个函数来检查这一点很容易,但是这个参数可能会在代码中的多个位置使用,因此如果它可以检查自己,而不是让外部的东西来做,那就太好了

在这个示例代码中,
arg\u checker
函数是我想作为
type
传递给
add\u参数的函数,假设两个数字都作为单个字符串传递给函数。由于在实际命令行上使用时并非如此,因此下面的示例中的“应该是好的”和“应该是坏的”参数将两个数字分隔为两个单独的字符串,以模拟实际行为。此外,由于这些都是要传递的数字值,我不认为要求在命令行中以字符串形式传递这两个数字是一个好的解决方案,比如
python script.py-a“2 3”

import configargparse

def arg_checker(arg: str):

    # Double-check only two arguments via assert.
    splitted = arg.split()
    assert len(splitted) == 2, "Did not have only two values."

    first = float(splitted[0])
    second = float(splitted[1])
    if first < 0:
        raise ValueError("First is negative")
    if second <= 0:
        raise ValueError("Second is negative or zero")
    if first > second:
        raise ValueError("First must be less than second.")
    return (first, second)

parser = configargparse.ArgumentParser()
parser.add_argument('-a', nargs=2, type=float)  # type=arg_checker)

# Good
parser.parse_args(['-a', '2', '3'])

# All bad
parser.parse_args(['-a', '3', '2'])
parser.parse_args(['-a', '-1', '3'])
导入configargparse
def arg_检查器(arg:str):
#通过assert只检查两个参数。
splitted=arg.split()
assert len(splitted)=2,“不只有两个值。”
第一个=浮点(拆分为[0])
秒=浮动(拆分[1])
如果第一次小于0:
提升值错误(“第一个为负”)
如果第二秒:
raise VALUERROR(“第一个必须小于第二个”)
返回(第一,第二)
parser=configargparse.ArgumentParser()
parser.add_参数('-a',nargs=2,type=float)#type=arg_checker)
#好
parser.parse_args(['-a','2','3'])
#糟糕透顶
parser.parse_args(['-a','3','2'])
parser.parse_args(['-a','-1',3'])

只是确认一下,你是说?(
configargparse
不是标准库。)@chepner是的,这就是我的意思。