2013-09-10 67 views
2

我在这一行越来越NoneType错误,Python的

TypeError: 'NoneType' object is not iterable 

temp, function = findNext(function) 

,而且不知道为什么,这是失败的。我在while循环中使用函数:

while 0 < len(function): 
    … 

但我没有遍历它。所有findNext(function)的回报是非常

return 'somestring',function[1:] 

并不能明白为什么它认为我遍历这些对象之一。

+1

因为你给出了这么小的代码片段,所以很难理解你的问题。请参阅http://stackoverflow.com/help/how-to-ask – msw

回答

1

我在猜测findNext没有返回任何东西,结果会自动返回None。有点像这样:

>>> def findNext(function): 
...  if function == 'y': 
...   return 'somestring',function[1:] 
... 
>>> function = 'x' 
>>> print(findNext(function)) 
None 
>>> temp, function = findNext(function) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'NoneType' object is not iterable 

解决的办法是总是返回一些东西。

+0

完美!非常感谢你!我忘了把所有的回报放在最后! – Hovestar

0

声明:

return 'somestring',function[1:] 

实际上返回长度为2的元组和元组是iterables。这样写出这样的陈述会更加地道:

return ('somestring', function[1:]) 

这使得它的元组性质更加明显。

+0

好的,我已经在我的代码中改变了这种情况,但是怎样才能将元组与返回的变量结合起来呢?我必须说temp = tuple [0] \ n function = tuple [1]? – Hovestar

+0

我不明白这个问题。你在'temp,function = findNext(function)'行中正确地做了“tuple unpacking”,但是我猜测你并没有一直开箱。很难用你给出的小部分代码来分辨。 – msw

+0

对不起,我正在避免粘贴整个事情,因为它有很多重复的if语句,但我可以向你保证拆包是一致的。你有这个问题,我问的是拆包。当它不起作用时,我期待的第一件事是包装和拆包的一致性。非常感谢你的帮助。 – Hovestar

相关问题