8

在哪里报告这个错误:TypeError: 'Namespace' object is not iterable

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

5 回答 5

13

您的问题与这一行有关:

(options, args) = parse_args()

这似乎是已弃用的“optparse”中的一个成语。

使用不带“选项”的 argparse 习语:

import argparse
parser = argparse.ArgumentParser(description='Do Stuff')
parser.add_argument('--verbosity')
args = parser.parse_args()
于 2014-11-26T19:50:06.200 回答
4

尝试:

args = parse_args()
print args

结果:

$ python x.py -b B -aa
Namespace(aa=True, b='B', c=None)
于 2013-09-29T10:18:03.727 回答
1

就像错误消息所说的一样:parser.parse_args()返回一个Namespace对象,即not iterable. 只有可迭代的东西才能像options, args = ....

虽然我不知道你期望什么,options并且args分别以你的例子结束。

于 2013-09-29T10:44:53.157 回答
1

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

安装:

(options, args) = parse_args()

你需要通过

args = parse_args()

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

例如:

a = argv.b
于 2017-10-21T11:52:29.997 回答
0

The best way (for me) to operate on args, where args = parser.parse_args() is using args.__dict__. It's good, for example, when you want to edit arguments. Moreover, it's appropriate to use long notation in your arguments, for example '--second' in '-a' and '--third' in '-b', as in first argument.

If you want to run 'main' you can should miss 'options', but it was said earlier.

于 2022-02-17T17:28:28.787 回答