-2

基本上,打开一个名为 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

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

4

2 回答 2

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 中的内置类。最好使用lstor L

于 2013-11-07T00:44:49.160 回答
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)

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

于 2013-11-07T00:24:27.840 回答