什么是TypeError: 'NoneType'对象是不可迭代的意思?例子:
for row in data: # Gives TypeError!
print(row)
什么是TypeError: 'NoneType'对象是不可迭代的意思?例子:
for row in data: # Gives TypeError!
print(row)
当前回答
对我来说,这就像是我戴上了Groovy的帽子,而不是Python 3的帽子。
在def函数末尾忘记return关键字。
已经有几个月没有认真地编写Python 3了。正在考虑在例程中计算的最后一个语句是按照Groovy(或Rust)的方式返回的。
进行了几次迭代,查看堆栈跟踪,插入try:…except TypeError:…块调试/步进代码以找出错误所在。
该消息的解决方案当然没有使错误跳出来。
其他回答
对我来说,这就像是我戴上了Groovy的帽子,而不是Python 3的帽子。
在def函数末尾忘记return关键字。
已经有几个月没有认真地编写Python 3了。正在考虑在例程中计算的最后一个语句是按照Groovy(或Rust)的方式返回的。
进行了几次迭代,查看堆栈跟踪,插入try:…except TypeError:…块调试/步进代码以找出错误所在。
该消息的解决方案当然没有使错误跳出来。
表示data的值为None。
它意味着data为None,这不是一个可迭代对象。添加or[]*可以防止异常并且不打印任何东西:
for row in data or []: # no more TypeError!
print(row)
*归功于先前的一些评论;请注意,引发异常也可能是一种预期的行为和/或数据设置不当的指示。
代码:用于数据中的行: TypeError: 'NoneType'对象不可迭代
它在抱怨哪个对象?二选一,行和数据。 在数据中的for行,需要是可迭代的?只有数据。
数据有什么问题?它的类型是NoneType。只有None类型为NoneType。所以data是None。
你可以在IDE中验证这一点,或者在for语句之前插入print "data is", repr(data),然后重新运行。
想想你接下来需要做什么: “无数据”应该如何表示?我们写一个空文件吗?我们是引发异常,还是记录警告,还是保持沉默?
这也取决于你使用的Python版本。看到python 3.6和python 3.8中抛出的不同错误消息,如下所示,这是我的情况下的问题
Python 3.6
(a,b) =无 回溯(最近一次调用): 文件“<stdin>”,第1行,在<模块> 'NoneType'对象不可迭代
Python 3.8
(a,b) =无 回溯(最近一次调用): 文件“<stdin>”,第1行,在<模块> TypeError:不能解包不可迭代的NoneType对象