基本上,打开一个名为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
*** 作为补充说明,当我调试它时,我得到了所需的输出,但当它到达文件的结尾是它给出异常的时间 *** 帮助
答案 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中的内置类。最好使用lst
或L
。
答案 1 :(得分:0)
错误可能是因为name_list
是None
了解如何初始化传递给函数的参数
在第二个示例中,您有nameList
和namelist
,您是否有可能将两者混合起来?
例如
nameList = None
# some other stuff
namelist = ["ann", "bob", "colin"] # this is creating a new variable
# instead of rebinding nameList
printList(nameList)
通常,让变量名称看起来如此相似是个坏主意