2016-10-28 26 views
0

我有两个参数:--1st和 - 2nd 我试图使“-2nd”参数只有当“第一”参数设置。Python argparse自变量的依赖

例如:

如果“1”设置和“第二”设置 - 好

如果没有设置“1”和“2号”未设置 - 好

其他案件不好。帮我,请

+0

两个参数都是可选的吗?或者只是第二个可选项? –

+0

两者都是可选的。但是如果第一盘,第二盘是必需的。如果2nn设置,首先是必需的。在其他情况下,必须有错误 – GolovDanil

+0

我会让它们在argparse中都是可选的,然后编写我自己的代码来对调用'parse_args'的结果进行验证检查。 – larsks

回答

2

我喜欢卡巴努斯的解决方案。这里是另外一个,这对于新用户简单:

parser = argparse.ArgumentParser() 
parser.add_argument('--first') 
parser.add_argument('--second') 
options = parser.parse_args() 

# Error checking 
if (options.first is None) != (options.second is None): 
    print 'Error: --first and --second must both be supplied or omitted' 

讨论

  • 我不使用--1st--2nd因为options.1st不工作,getattr(options, '1st') is too messy. Instead, I use --first and --second`为插图的目的。
  • 表达式(options.first is None) != (options.second is None)简洁地表达了您的错误情况。
+0

如果您为有用的Python属性名称提供了'dest ='first'',那么仍然可以使用'--1st'作为命令行名称。 – ShadowRanger