我试图传递2个参数,条件是如果第一个参数不为null,那么它应该存储第二个参数。代码如下所示
import argparse
store= ""
parser = argparse.ArgumentParser()
parser.add_argument('-one','--two', required = True)
args = parser.parse_args()
if args.one != "":
store = args.two
print store
但我收到以下错误:
C:\app\Tools\exam\Python25>python nwe.py -one abc
Traceback (most recent call last):
File "nwe.py", line 8, in <module>
if args.one != "":
AttributeError: 'Namespace' object has no attribute 'one'
谁能告诉我发生了什么?
答案 0 :(得分:1)
Yu可以使用default
和parser
:
import argparse
store = ""
parser = argparse.ArgumentParser()
parser.add_argument('--one', help='this is one help', default=None)
parser.add_argument('--two', help='this is two help')
sys_args = vars(parser.parse_args())
print sys_args.get('one')
if sys_args.get('one'):
print sys_args.get('two')
答案 1 :(得分:0)
我认为你已经掩盖了长期权和空头期权之间的区别
https://docs.python.org/3/library/argparse.html#dest
add_argument
创建一个Action对象。您的示例生成(如交互式会话中所示):
In [32]: parser.add_argument('-one','--two', required = True)
Out[32]: _StoreAction(option_strings=['-one', '--two'], dest='two', nargs=None,
const=None, default=None, type=None, choices=None, help=None, metavar=None)
请注意,dest
是&#39;两个&#39;取自您的&#39; - 两个&#39;。 &#39; - 酮&#39;在option_strings
列表中,但未设置dest
。该语句创建一个Action,而不是两个。
测试时,最好打印args
对象。这可以让您更好地了解解析器生成的内容。不要直接测试可能不存在的属性。
'prog.py -one value'
和'prog.py --two value'
都会生成args
,看起来像
Namespace(two='value')
和
args.two == 'value'
如果你同时使用它们,它将是命名空间中出现的最后一个值(无论顺序如何)
如果您定义了2个参数:
parser.add_argument('-o','--one')
parser.add_argument('-t','--two')
然后,您可以在解析
之后测试/使用两者if args.one is None: # the default default is None, not ""
store = args.two
etc