I have a set of boolean argparse options: --foo/--no-foo
, --bar/--no-bar
, --baz/--no-baz
My script makes sense only if at least one of those options is set to True
.
I'd like to issue an Exception correctly processed by argparse
, which will be managed as a command line error clear message.
But argparse.ArgumentTypeError
is not a good option because it required the option as first argument to the constructor ... and my case is related to multiple options.
[Edit based on @00 comment:] The only solution I've got now is to raise, at the end of the command line processing, a ValueError is none of those options are set. But it is an exception, which is not user friendly.
What is the way to proceed in such cases?
Thanks a lot.
P.S.: Code to generate those options:
@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})