我意识到这很像使用 argparse 模块在 Python 中设置两个互斥选项的默认选项 https://stackoverflow.com/questions/9365486/setting-default-option-in-python-of-two-mutually-exclusive-options-using-the-arg尽管从不同的角度来看(并且那里给出的答案似乎没有帮助)。
代码块(解析器是argparse.ArgumentParser的实例):
mutex_group = parser.add_mutually_exclusive_group()
mutex_group.add_argument("--show", action="store_true",
dest="show", default=True)
mutex_group.add_argument("--insert", action="store_true",
dest="insert")
opts = parser.parse_args()
如果两者都不是--show
or --insert
已指定,我想默认为--show
(hence default=True
)但是如果--insert
然后使用opts.show
尽管是互斥块的一部分,但仍然设置为 true(因为默认值)。
当前代码在测试是否存在时检查是否未设置其他选项opt.show
为 True,即:
if opts.show and not opts.insert:
do_something()
elif opts.insert:
do_something_else()
但这无法扩展(当您添加时会发生什么--delete
到互斥组等)所以我正在寻找一种更好的方法来使所有其他变量opts.show
false,但仍将其作为默认值。
阅读 argparse 文档,我认为自定义操作是可行的方法,但无法看到如何从其中访问互斥组的其他成员(理论是我可以迭代它们,并翻转默认值,如果其余的均已设置)。
另一种选择是反转 if 条件,但这似乎不干净(如果默认值更改,则 if 语句的顺序也必须更改)。