我有一个测试代码如下,它将采用位置参数 file
或所有可选参数 time
、expression
和 名称
:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-t","--time")
parser.add_argument("-x","--expression")
parser.add_argument("-n","--name")
parser.add_argument("file")
print parser.parse_args()
以下组合应该有效
test.py filename
test.py -t 5 -x foo -n test
但不是这些:
test.py filename -t 5 # should raise error because the positional and the optional -t argument cannot be used together
test.py -t 5 -x foo # should raise an error because all three of the optional arguments are required
这个问题有什么简单的解决方案吗?
最佳答案
第一个问题是您已指定该文件是位置文件,这将使其成为必需文件。您可能需要将其转换为可选参数。
这是检查是否提供了正确参数的简单方法:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-t","--time")
parser.add_argument("-x","--expression")
parser.add_argument("-n","--name")
parser.add_argument("-f", "--file")
args = parser.parse_args()
has_file = args.file is not None
has_txn = None not in frozenset([args.time, args.expression, args.name])
assert (has_file ^ has_txn), "File or time, expression and name must be provided"
关于python - 如何让 argparse 检查互斥的参数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15804859/