TypeError:“ NoneType”对象不可迭代

时间:2020-03-29 00:45:37

标签: python list compiler-errors

我知道此错误消息“ 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

我希望我的代码执行相同的输出而没有错误消息。 您知道列表的哪一部分可能没有“ None”吗? 谢谢:)

3 个答案:

答案 0 :(得分:1)

nextYear函数中没有返回任何内容,这就是heights函数中参数printListNone的原因。

答案 1 :(得分:1)

您的代码有两点错误:

  • 首先,您不会在函数中返回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

所以第一件事就是从循环中删除这一行

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

它将在每次迭代时自动增加,如果您希望将其增加2而不是1,则可以在range()中将其指定为步长。

答案 2 :(得分:0)

您在nextYear中缺少return语句。

您的功能应该是:

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做的事情的了解来看。无论如何,您都需要一个return语句。

我的输出是:

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