首页 > 解决方案 > “命名空间”对象不可迭代

问题描述

尝试使用 argparse 传递不确定数量的整数。当我输入:py main.py 3 2

    %%writefile main.py

import sorthelper
import argparse


integers = 0

#top-level parser creation
parser = argparse.ArgumentParser("For sorting integers")

nargs = '+' #-> gathers cmd line arguments into a list
args = parser.add_argument('-f', metavar='N', type=int, nargs='+', help='yada yada yada')

args = parser.parse_args()

print(sorthelper.sortNumbers(args))


%%writefile sorthelper.py

def sortNumbers(args):
    sorted(args)

错误命名空间参数不可迭代

我认为是因为我传递的参数类型不正确。在阅读了所有文档后,我发现我无法弄清楚如何进行这项工作。我希望程序对我传递的数字进行排序。

标签: pythonpython-3.xargparsepython-module

解决方案


parser.parse_args()返回一个Namespaceobject,它是一个对象,其属性表示已解析的标志。它是不可迭代的。

似乎您想获取 after 给出的命令行参数-f,在这种情况下,您将从对象中取出该特定标志Namespace

print(sorthelper.sortNumbers(args.f))

此外,您当前拥有的代码将 print None,因为sortNumbers()不返回任何内容。内置sorted()函数没有就地排序list.sort()如果你想使用它的话),所以你必须实际做

def sortNumbers(args):
    return sorted(args)

推荐阅读