Нетиповая Ошибка, Python


Я получаю

TypeError: 'NoneType' object is not iterable 

На этой строке:

temp, function = findNext(function) 
И понятия не имею, почему это не удается. Я использую функцию в циклах while:
while 0 < len(function):
    …

Но я не перебираю его. Все возвраты в findNext(function) в значительной степени

return 'somestring',function[1:]
И не может понять, почему он думает, что я повторяю один из этих объектов.
2 2

2 ответа:

Я предполагаю, что 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

Решением было бы всегда возвращать что-то.

Утверждение:

return 'somestring',function[1:]

Фактически возвращает кортеж длины 2, а кортежи являются итерациями. Было бы более идиоматично написать это утверждение как:

return ('somestring', function[1:])
Что делает его кортежную природу гораздо более очевидной.