首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError:"NoneType“对象不可迭代

TypeError:"NoneType“对象不可迭代
EN

Stack Overflow用户
提问于 2020-03-29 00:45:37
回答 3查看 12.6K关注 0票数 0

我知道这个错误消息'TypeError:'NoneType‘对象是不可迭代的’意味着没有数据。然而,我正在浏览我所有的清单,没有一个部分没有价值元素。这是我的代码中与我的问题相关的部分。

代码语言:javascript
运行
复制
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))

这是我的代码输出:

代码语言:javascript
运行
复制
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

我希望我的代码在没有错误消息的情况下执行相同的输出。你知道名单的哪一部分可能没有吗?谢谢您:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-29 00:59:04

您的代码有两处错误:

  • 首先在函数

中不返回next_heights

代码语言:javascript
运行
复制
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进行打印。

  • 的第二件事是增加迭代器,您不能这样做,您可以尝试这个小例子来理解

的意思。

代码语言:javascript
运行
复制
for i in range(10):
  print(i)
  i +=15555

因此,首先要做的是从循环中删除这一行。

代码语言:javascript
运行
复制
def nextYear(heights):
    next_heights = []
    for i in range(len(heights)):
        next_heights.append(heights[i] + 5)
    return next_heights

它将在每次迭代中自动递增,如果希望将其增加两次而不是一次,那么您可以在range()函数中将其指定为步骤大小。

票数 1
EN

Stack Overflow用户

发布于 2020-03-29 00:49:29

您不会在nextYear函数中返回任何内容,这就是为什么printList函数中的参数heightsNone的原因。

票数 1
EN

Stack Overflow用户

发布于 2020-03-29 00:50:44

nextYear中缺少一个返回语句。

你的职能应该是:

代码语言:javascript
运行
复制
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做什么的理解来看。在任何情况下,您都需要一个返回语句。

我的产出是:

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60908868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档