python3 argparse:检查布尔参数的组合

时间:2019-06-19 08:23:32

标签: python python-3.x argparse

我有一组布尔argparse选项:--foo/--no-foo--bar/--no-bar--baz/--no-baz

仅当这些选项中的至少一个设置为True时,我的脚本才有意义。

我想发布由argparse正确处理的异常,该异常将作为命令行错误清除消息进行管理。

但是argparse.ArgumentTypeError并不是一个好的选择,因为它需要将该选项作为构造函数的第一个参数...而我的情况与多个选项有关。

[基于@ 00注释进行编辑:]我现在唯一的解决方案是提出,在命令行处理结束时,ValueError是未设置的那些选项。但这是一个例外,并不友好。

在这种情况下如何处理?

非常感谢。

P.S .:生成这些选项的代码:

    @classmethod
    def addBoolean(
        cls, argumentParser, dest, helpTrue, helpFalse,
        default=None
    ):
        """Adds a boolean option
        - argumentParser: A argparse.ArgumentHelper object
        - dest: The destination argument
        - helpTrue: The documentation of the True option
        - helpFalse: The documentation of the False option
        - default: Value to use if not required and not provided

        When no default (None) is provided, required is True

        The option will be --{dest} and --no-{dest}
        """
        # pylint: disable=too-many-arguments

        required = (default is None)
        group = argumentParser.add_mutually_exclusive_group(
            required=required,
        )
        group.add_argument(
            f'--{dest}',
            dest=dest,
            action='store_true',
            help=helpTrue
        )
        group.add_argument(
            f'--no-{dest}',
            dest=dest,
            action='store_false',
            help=helpFalse
        )
        if not required:
            argumentParser.set_defaults(**{dest: default})

1 个答案:

答案 0 :(得分:0)

根据Python argparse: Make at least one argument required

可以使用argparse创建灵活的parser.error("error message")错误

(请参阅问题中@fabianegli的评论)