Python的argparse错误

9

报告这个错误的位置: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
在提出问题之前,您应该至少浏览一下模块/包的文档。特别是使用的第一个 示例清楚地表明,您应该执行args = parser.parse_args()而不是像旧模块那样执行options, args = parser.parse_args() - Bakuriu
5个回答

14

您的问题与此行有关:

(options, args) = parse_args()

似乎是来自已弃用的"optparse"中的一句习语。使用不带"options"的argparse习惯用法:
import argparse
parser = argparse.ArgumentParser(description='Do Stuff')
parser.add_argument('--verbosity')
args = parser.parse_args()

4

尝试:

args = parse_args()
print args

结果:

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

1
错误在于 parse_argv 选项不是必需的也没有被使用,只有 argv 被传递。
而不是:
(options, args) = parse_args()

你需要传递。
args = parse_args()

其余部分保持不变。调用任何方法时,请确保使用argv而不是option。

例如:

a = argv.b

1

正如错误消息所说:parser.parse_args()返回一个Namespace对象,它是不可迭代的。只有可迭代的东西才能像options, args = ...一样进行“解包”。

尽管我不知道你在例子中期望optionsargs分别成为什么。


0

在处理参数时,我认为最好的方法是使用args.__dict__,其中args = parser.parse_args()。这很好用,例如当您想要编辑参数时。此外,在参数中使用长标记是适当的,例如在第一个参数中使用'--second'代替'-a''--third'代替'-b'

如果您想运行“main”,则可以省略“options”,但之前已经说过了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接