在python中迭代一个简单的循环

时间:2013-11-07 00:22:43

标签: python

基本上,打开一个名为names.txt的文件,用它来创建一个列表。

然后,在另一个函数中,我将该列表作为参数传递。以下是功能:

#prints the list to the screen 
def printList(nameList):
    for n in nameList:
        print(n)

无论出于何种原因,它都会给我这个错误:“builtins.TypeError:'NoneType'对象不可迭代”

我假设它可能尝试过多次迭代,并获得空白位置?不确定。我尝试将循环作为:

def printList(nameList):
    for n in range(0, namelist+1):
        print(n)

或者接近那个的东西,但这只打印了编号列表,而不是列表的内容。

我将整个源码放在pastebin上: http://pastebin.com/CyyhU882

它打开的文本文件的内容: http://pastebin.com/HNeqw9Nv

*** 作为补充说明,当我调试它时,我得到了所需的输出,但当它到达文件的结尾是它给出异常的时间 *** 帮助

2 个答案:

答案 0 :(得分:1)

您有一个常见问题:您认为list.sort()会返回对已排序列表的引用。它不是;它返回None

将第14行更改为

nameList.sort()

或者如果你真的想要,你可以这样做:

nameList = sorted(nameList)

这是因为命令/查询分离。

http://en.wikipedia.org/wiki/Command%E2%80%93query_separation

编辑:此外,这一行显然是错误的:

result = nameList[n].rstrip('\n')

for循环将n设置为其中一个名称。以上应该只是:

result = n.rstrip('\n')

但是你要打印你找到名字的索引。要获取索引,您需要查找enumerate()并使用它:

for i, n in enumerate(nameList):

并且您不应该使用list作为变量名,因为它是Python中的内置类。最好使用lstL

答案 1 :(得分:0)

错误可能是因为name_listNone

了解如何初始化传递给函数的参数

在第二个示例中,您有nameListnamelist,您是否有可能将两者混合起来?

例如

nameList = None
# some other stuff
namelist = ["ann", "bob", "colin"] # this is creating a new variable 
                                   # instead of rebinding nameList
printList(nameList)

通常,让变量名称看起来如此相似是个坏主意