在Python的argparse中相当于Julia的ArgParse range_teser?

时间:2016-04-04 08:59:59

标签: python argparse

来自Julia的ArgParse允许为每个命令行参数传递一个函数,该函数将检查传递的参数是否可以被接受(参见这里:http://argparsejl.readthedocs.org/en/latest/argparse.html?highlight=range_tester)。例如,这可用于将传递的参数数字参数约束为正数。

可以通过在解析参数后手动检查参数来做到这一点,但我认为range_tester方法更清晰。在Python的argparse中是否存在等效的功能?我还没有找到它。

1 个答案:

答案 0 :(得分:3)

尝试type的{​​{1}}参数。它可以采取任何可赎回。请参阅perfect_square获取灵感的示例。

以下程序创建add_argument,接受特定范围内的值,而不使用type(可能适用于大范围?):

choice

输出:

import argparse

parser = argparse.ArgumentParser()

def int_range(start, end):
    def range_type(arg):
        try:
            val = int(arg)
        except ValueError:
            raise argparse.ArgumentTypeError("Invalid value for range (%d, %d): %r" % (start, end, arg))
        if val not in range(start, end):
            raise argparse.ArgumentTypeError("%d not in range (%d, %d)" % (val, start, end))
        return val
    return range_type

parser.add_argument('--foo', type=int_range(10, 100))

args = parser.parse_args()

print("Foo is %d" % args.foo)

请注意,转换失败时会引发> python argparse_type.py --foo 0 usage: argparse_type.py [-h] [--foo FOO] argparse_type.py: error: argument --foo: 0 not in range (10, 100) > python argparse_type.py --foo bar usage: argparse_type.py [-h] [--foo FOO] argparse_type.py: error: argument --foo: Invalid value for range (10, 100): 'bar' > python argparse_type.py --foo 50 Foo is 50 。这样,argparse可以显示帮助屏幕和自定义错误消息。如果引发argparse.ArgumentTypeError,而不是ValueError内置,则会显示默认消息“invalid int value:...”。