我有这样的剧本:
import argparse
parser = argparse.ArgumentParser(
description='Text file conversion.'
)
parser.add_argument("inputfile", help="file to process", type=str)
parser.add_argument("-o", "--out", default="output.txt",
help="output name")
parser.add_argument("-t", "--type", default="detailed",
help="Type of processing")
args = parser.parse_args()
for arg in args:
print(arg)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我收到错误:
TypeError: 'Namespace' object is not iterable
Run Code Online (Sandbox Code Playgroud)
如何迭代参数及其值?
Jam*_*pam 71
如果你想迭代命名空间对象,请添加'vars':
for arg in vars(args):
print arg, getattr(args, arg)
Run Code Online (Sandbox Code Playgroud)
Chr*_*cca 19
Namespace 对象不可迭代,如果您想要字典,标准文档建议执行以下操作:
>>> vars(args)
{'foo': 'BAR'}
Run Code Online (Sandbox Code Playgroud)
所以
for key,value in vars(args).iteritems():
# do stuff
Run Code Online (Sandbox Code Playgroud)
说实话,我不确定你为什么要迭代这些参数.这有点违背了拥有参数解析器的目的.
后
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
要显示参数,请使用:
print args # or print(args) in python3
Run Code Online (Sandbox Code Playgroud)
的args(的类型的对象argparse.Namespace)没有可迭代(即,不是一个列表),但它有一个.__str__方法,它很好地显示的值.
args.out并args.type给出你定义的2个参数的值.这大部分时间都有效. getattr(args, key)访问值的最常用方法,但通常不需要.
vars(args)
Run Code Online (Sandbox Code Playgroud)
将命名空间转换为字典,您可以使用所有字典方法访问该字典.这是拼写出来的docs.
ref:文档的命名空间段落 - https://docs.python.org/2/library/argparse.html#the-namespace-object