我有一组布尔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})
答案 0 :(得分:0)
根据Python argparse: Make at least one argument required:
可以使用argparse
创建灵活的parser.error("error message")
错误
(请参阅问题中@fabianegli的评论)