【问题标题】:The python's argparse errorspython的argparse错误
【发布时间】:2013-10-05 06:58:22
【问题描述】:

哪里报这个错误: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()

【问题讨论】:

  • 在打开问题之前,您至少应该浏览一下模块/包的documentation。特别是 first example 的用法清楚地表明您应该使用 args = parser.parse_args() 而不是 options, args = parser.parse_args(),就像使用旧模块一样。

标签: python namespaces argparse


【解决方案1】:

您的问题与这一行有关:

(options, args) = parse_args()

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

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

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

【讨论】:

    【解决方案2】:

    试试:

    args = parse_args()
    print args
    

    结果:

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

    【讨论】:

      【解决方案3】:

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

      虽然我不知道您期望 options 和 args 分别以您的示例结束。

      【讨论】:

        【解决方案4】:

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

        安装于:

        (options, args) = parse_args()
        

        你需要通过

        args = parse_args()
        

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

        例如:

        a = argv.b
        

        【讨论】:

          【解决方案5】:

          (对我而言)对 args 进行操作的最佳方式,其中args = parser.parse_args() 正在使用args.__dict__。例如,当您想要编辑参数时,这很好。 此外,在你的参数中使用长符号是合适的,例如'-a' 中的'--second' 和'-b' 中的'--third',就像在第一个参数中一样。

          如果你想运行'main',你可以忽略'options',但前面已经说过了。

          【讨论】:

            猜你喜欢
            • 2013-06-06
            • 2018-07-21
            • 2014-06-03
            • 2014-11-03
            • 1970-01-01
            • 1970-01-01
            • 2017-08-20
            • 2016-06-20
            • 1970-01-01
            相关资源
            最近更新 更多