Python 如何按值解析argparser参数

Python 如何按值解析argparser参数,python,argparse,Python,Argparse,目前我正在编写一个脚本,它接受这样的空格分隔参数 parser = argparse.ArgumentParser(description='foo 1.0') parser.add_argument('-a', '--arch', help='specify the angle', nargs="+" choices=ch_list, required=True 我也要通过 +foo +bar +baz 或 或 其中foo-bar-baz是alphanum元素 最优雅的理清论点的方法是什么

目前我正在编写一个脚本,它接受这样的空格分隔参数

parser = argparse.ArgumentParser(description='foo 1.0')
parser.add_argument('-a', '--arch', help='specify the angle', nargs="+" choices=ch_list, required=True
我也要通过

+foo +bar +baz

其中
foo-bar-baz
是alphanum元素

最优雅的理清论点的方法是什么

要么all应该有
+
符号,要么
-
符号,要么根本没有符号,如果发生参数混合,脚本应该抛出错误并退出。

1)您不能将
-foo,-baz,-bar
中的任何一个作为值传递。连字符将使ArgParse将其解释为选项标志并抛出错误

(二)

最优雅的理清论点的方法是什么

你可以

ch_list = ['foo', 'bar', 'baz', '+foo', '+bar', '+baz'] 
这将确保列表之外的内容不被允许,但不会阻止用户输入不同格式的混合匹配,例如
/program--arch foo+baz+bar

为了避免这种情况,您需要在
parse_args()
之后自己验证参数

阅读
foo bar baz
ch_list = ['foo', 'bar', 'baz', '+foo', '+bar', '+baz'] 
  args = parser.parse_args()
  l = args.arch if args.arch is not None else []
  if len(l):
    has_plus = lambda x : x[0] == '+'
    first_has_plus = has_plus(l[0])
    for x in l:
      if first_has_plus ^ has_plus(x):
        print("INVALID")
        return
    print("PASSED")