Ошибка типа: объект «NoneType» не повторяется - PullRequest
0 голосов
/ 29 марта 2020

Я знаю, что это сообщение об ошибке 'TypeError:' NoneType 'объект не повторяется' означает, что нет данных. Тем не менее, я просматриваю весь свой список, и нет ни одной части, которая не имеет никакого значения элемента. Это раздел моего кода, который соответствует моей проблеме.

def printList(heights):
    print(" ".join(str(h) for h in heights))


def nextYear(heights):
    next_heights = []
    for i in range(len(heights)):
        next_heights.append(heights[i] + 5)
        i += 1
    print(" ".join(str(h) for h in next_heights))

#main routine

heights = [33, 45, 23, 43, 48, 32, 35, 46, 48, 39, 41]
printList(heights)
print("Predicted heights after a year")
printList(nextYear(heights))

Это вывод моих кодов:

33 45 23 43 48 32 35 46 48 39 41
Predicted heights after a year
38 50 28 48 53 37 40 51 53 44 46
Traceback (most recent call last):
  File "/Users/ellarendell/Desktop/test.py", line 17, in <module>
    printList(nextYear(heights))
  File "/Users/ellarendell/Desktop/test.py", line 2, in printList
    print(" ".join(str(h) for h in heights))
TypeError: 'NoneType' object is not iterable

Я хочу, чтобы мой код выводил то же самое без сообщения об ошибке. Знаете ли вы, какая часть списка может иметь «Нет»? Спасибо:)

Ответы [ 3 ]

1 голос
/ 29 марта 2020

В вашем коде есть две ошибки:

  • Сначала вы не возвращаете next_heights в своей функции
def nextYear(heights):
    next_heights = []
    for i in range(len(heights)):
        next_heights.append(heights[i] + 5)
        i += 1
    return next_heights

Без обратной линии вернет None и передаст ее функции printList, также вам не нужно печатать внутри nextYear, как вы уже вызывали printList для печати после того, как функция вернет блики

  • Секунда дело в увеличении итератора, вы буквально не можете этого сделать, вы можете попробовать этот маленький пример, чтобы понять, что я имею в виду
for i in range(10):
  print(i)
  i +=15555

Итак, первое, что нужно сделать, это удалить эту строку из вашего l oop

def nextYear(heights):
    next_heights = []
    for i in range(len(heights)):
        next_heights.append(heights[i] + 5)
    return next_heights

Он будет увеличиваться автоматически при каждой итерации, если вы хотите увеличить его на два вместо одного, то вы можете указать это в range() как размер шага.

1 голос
/ 29 марта 2020

Вы ничего не возвращаете в функции nextYear, поэтому аргумент heights в функции printList равен None.

0 голосов
/ 29 марта 2020

Вы пропускаете оператор возврата в nextYear.

Ваша функция должна быть:

def nextYear(heights):
    next_heights = []
    for i in range(len(heights)):
        next_heights.append(heights[i] + 5)
        i += 1
    print(" ".join(str(h) for h in next_heights))
    return next_heights

... по крайней мере из моего понимания того, что вы хотите nextYear для делать. В любом случае вам нужен оператор возврата.

Мой вывод:

33 45 23 43 48 32 35 46 48 39 41
Predicted heights after a year
38 50 28 48 53 37 40 51 53 44 46
38 50 28 48 53 37 40 51 53 44 46

Для пояснения, None исходит из возврата вашей функции nextYear.

В вашей строке printList(nextYear(heights)), nextYear(heights) возвращает None, что передается в printList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...