【发布时间】:2014-01-18 08:19:20
【问题描述】:
我正在尝试做一件非常简单的事情 - 只有两个选项:-p 和 -c,相互排斥,可能有也可能没有参数,请使用 th...is可选参数或不使用th...at。这就是我得到的:
def main():
import argparse
parser = argparse.ArgumentParser(description = '''ArgParser with optional argument''',
argument_default = argparse.SUPPRESS)
group1 = parser.add_mutually_exclusive_group(required=True)
group1.add_argument('-p', '--project', dest='proj',
nargs='?', const='all', type=str,
help='list of project(s)')
group1.add_argument('-c', '--component', dest='comp',
nargs='?', const='all', type=str,
help='list of Component(s)')
args = parser.parse_args()
print(args)
if args.proj:
outString = 'project/'+args.proj if args.proj is not 'all' else 'projects'
elif args.comp:
outString = 'component/'+args.comp if args.comp is not 'all' else 'components'
else: pass
print('OutPutString: '+outString)
if __name__ == "__main__":
import sys
try: sys.exit(main())
except KeyboardInterrupt: pass
finally: print
对于if-elif-else 块中的第一个条件,它工作得很好,所以它工作:
dass@mon105:~$ ./argParseOpts.py -p
Namespace(proj='all')
OutPutString: projects
#
dass@mon105:~$ ./argParseOpts.py -p testing
Namespace(proj='testing')
OutPutString: project/testing
但如果使用-c 而不是-p(即第二个条件)则不是:
dass@mon105:~$ ./argParseOpts.py -c
Namespace(comp='all')
Traceback (most recent call last):
File "./argParseOpts.py", line 32, in <module>
try: sys.exit(main())
File "./argParseOpts.py", line 21, in main
if args.proj:
AttributeError: 'Namespace' object has no attribute 'proj'
谁能告诉我我是否遗漏了什么或做错了什么?使用 v2.7.2,如果这很重要。干杯!!
【问题讨论】:
-
@MartijnPieters:嗯......我在 v2.7.3 上也看到了同样的错误。试图找出我是否在任何地方安装了 v2.7.5。但是在量产机上,我还是得用v2.7.2。
-
抱歉,当我在为您的问题测试修复程序的过程中走开,然后忘记我把它放进去时,这就是您得到的结果。:-P
-
@MartijnPieters:刚刚在原始帖子中添加了
if __name__ == "__main__":位,以确保不会导致此问题。在 v3.3.3 上测试过的 Juts 仍然是同样的错误。但是找不到安装了 v2.7.5 的盒子。
标签: python python-2.7 arguments argparse