python的argparse错误

时间:2013-09-29 10:15:32

标签: python namespaces argparse

报告此错误:TypeError:'Namespace'对象不可迭代

import argparse

def parse_args():
    parser = argparse.ArgumentParser(add_help=True)
    parser.add_argument('-a', '--aa', action="store_true", default=False)
    parser.add_argument('-b', action="store", dest="b")
    parser.add_argument('-c', action="store", dest="c", type=int)

    return parser.parse_args()

def main():
    (options, args) = parse_args()

if __name__ == '__main__':
    main()

4 个答案:

答案 0 :(得分:10)

您的问题与此行有关:

(options, args) = parse_args()

这似乎是被弃用的“optparse”的成语。

使用没有“options”的argparse习语:

import argparse
parser = argparse.ArgumentParser(description='Do Stuff')
parser.add_argument('--verbosity')
args = parser.parse_args()

答案 1 :(得分:3)

尝试:

args = parse_args()
print args

结果:

$ python x.py -b B -aa
Namespace(aa=True, b='B', c=None)

答案 2 :(得分:1)

这与错误消息完全相同:parser.parse_args()返回Namespace对象,即not iterable。只有可迭代的东西可以像options, args = ...一样“解压缩”。

虽然我不知道你分别期待optionsargs的结果,但最终会像你的例子一样。

答案 3 :(得分:1)

错误在于不需要或不使用parse_argv选项,只传递argv。

Insted of:

(options, args) = parse_args()

你需要传递

args = parse_args()

其余的保持不变。 要调用任何方法,只需确保使用argv而不是选项。

例如:

a = argv.b