Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python argparse中的参数_Python_Python 2.7_Argparse - Fatal编程技术网

Python argparse中的参数

Python argparse中的参数,python,python-2.7,argparse,Python,Python 2.7,Argparse,我试图传递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 但我得

我试图传递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'
C:\app\Tools\exam\Python25>python nwe.py-one abc
回溯(最近一次呼叫最后一次):
文件“nwe.py”,第8行,在
如果args.one!="":
AttributeError:“命名空间”对象没有属性“一”

有人能告诉我到底发生了什么吗

你可以使用
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')

我认为你掩盖了多头期权和空头期权之间的区别

add_参数
创建动作对象。您的示例生成(如交互式会话中所示):

请注意,
dest
是'two',取自您的'--two'-“一”在
选项\u字符串列表中,但不设置
dest
。此语句创建一个操作,而不是两个

测试时,最好打印
args
对象。这让您更好地了解解析器产生了什么。不要直接测试那些甚至可能不存在的属性

'prog.py-one-value'
'prog.py-two-value'
都将生成一个

Namespace(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

请检查新答案。它说的太长了,所以我添加了新的答案。stackoverflow是个新手,请记住@Kobi KYou定义了1个参数,而不是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