什么是TypeError: 'NoneType'对象是不可迭代的意思?例子:

for row in data:  # Gives TypeError!
    print(row)

当前回答

这也取决于你使用的Python版本。看到python 3.6和python 3.8中抛出的不同错误消息,如下所示,这是我的情况下的问题

Python 3.6

(a,b) =无 回溯(最近一次调用): 文件“<stdin>”,第1行,在<模块> 'NoneType'对象不可迭代

Python 3.8

(a,b) =无 回溯(最近一次调用): 文件“<stdin>”,第1行,在<模块> TypeError:不能解包不可迭代的NoneType对象

其他回答

代码:用于数据中的行: TypeError: 'NoneType'对象不可迭代

它在抱怨哪个对象?二选一,行和数据。 在数据中的for行,需要是可迭代的?只有数据。

数据有什么问题?它的类型是NoneType。只有None类型为NoneType。所以data是None。

你可以在IDE中验证这一点,或者在for语句之前插入print "data is", repr(data),然后重新运行。

想想你接下来需要做什么: “无数据”应该如何表示?我们写一个空文件吗?我们是引发异常,还是记录警告,还是保持沉默?

这意味着数据变量传递的是None(类型为NoneType),它的等效值为空。所以它不能像你尝试的那样,作为一个列表是可迭代的。

这意味着data的值为None。

另一种可能产生这种错误的情况是,当你设置某个值等于函数的返回值时,却忘记实际返回任何值。

例子:

def foo(dict_of_dicts):
    for key, row in dict_of_dicts.items():
        for key, inner_row in row.items():
            Do SomeThing
    #Whoops, forgot to return all my stuff

return1, return2, return3 = foo(dict_of_dicts)

这是一个很难发现的错误,因为如果行变量恰好在某个迭代中为None,也会产生错误。发现它的方法是跟踪在最后一行失败,而不是在函数内部。

如果你只从一个函数返回一个变量,我不确定是否会产生错误…我怀疑错误"'NoneType'对象在Python中不可迭代"在这种情况下实际上是在暗示"嘿,我试图遍历返回值并将它们按顺序分配给这三个变量但我只得到None来迭代"

这也取决于你使用的Python版本。看到python 3.6和python 3.8中抛出的不同错误消息,如下所示,这是我的情况下的问题

Python 3.6

(a,b) =无 回溯(最近一次调用): 文件“<stdin>”,第1行,在<模块> 'NoneType'对象不可迭代

Python 3.8

(a,b) =无 回溯(最近一次调用): 文件“<stdin>”,第1行,在<模块> TypeError:不能解包不可迭代的NoneType对象