我编写了一个使用argparse的小程序。我特别想防止组合使用 3 个标志。我已经创建了一些代码来实现此目的,但它看起来不太优雅。我应该为此使用 sub_parsers 吗?我在这里找到的示例似乎解决了更复杂的标志选项,例如创建可以一起运行的标志组合以及限制与其他标志的组合。
这是我整理的:
parser.add_argument(-a)
parser.add_argument(-b)
parser.add_argument(-c)
args = parser.parse_args()
count = 0
for item in [args.a, args.b, args.c]:
if item is not None:
count += 1
if count > 1: raise Exception
它完成了工作,但我觉得我的循环和计数充其量只是临时的。有没有更好的办法? sub_parser 适合这种情况吗?
如果这是一次性的,那么坚持你的解决方案,但如果你需要多个互斥的定义,查找表可能是你最好的选择:
parser.add_argument(-a)
parser.add_argument(-b)
parser.add_argument(-c)
args = parser.parse_args()
processed_args = set()
mutex = {args.a : {args.b, args.c}, args.b : {args.a, args.c}, args.c : {args.a, args.b}}
for arg in args:
processed_args.add(arg)
if arg in mutex and any((temp in processed_args for temp in mutex[arg])):
raise Exception("Found multiple mutually exclusive arguments!")