类型错误:无法解压不可迭代的 NoneType 对象

TypeError: 无法解压不可迭代的 NoneType 对象

TypeError: cannot unpack non-iterable NoneType object

当我们尝试解包一个None值时,会出现 Python“TypeError: cannot unpack non-iterable NoneType object”。

要解决该错误,请追踪变量在何处被分配了 None 值并将分配更正为可迭代对象,例如列表或元组。

类型错误无法解压不可迭代的非类型对象

下面是错误如何发生的示例。

主程序
# ⛔️ TypeError: cannot unpack non-iterable NoneType object a, b = None

我们正在尝试解包一个None值,但None值是不可迭代的。

如果您需要声明存储None在同一行的多个变量,请None用逗号分隔多个值。

主程序
a, b = None, None print(a) # 👉️ None print(b) # 👉️ None
要解决该错误,您必须找到为变量赋值的位置并更正赋值。 None

最常见的None价值来源是:

  1. 有一个不返回任何东西的函数(None隐式返回)。
  2. 将变量显式设置为None.
  3. 将变量分配给调用不返回任何内容的内置函数的结果。
  4. 具有仅在满足特定条件时才返回值的函数。

不显式返回值的函数 return None

主程序
# 👇️ this function returns None def get_list(): print(['one', 'two']) # ⛔️ TypeError: cannot unpack non-iterable NoneType object a, b = get_list()

您可以使用return语句从函数返回值。

主程序
def get_list(): return ['one', 'two'] a, b = get_list() print(a) # 👉️ 'one' print(b) # 👉️ 'two'

如果您需要在解包之前if检查变量是否未存储
值,
请使用语句。
None

主程序
example = None if example is not None: a, b = example else: # 👇️ this runs print('variable stores a None value')
请注意,有许多内置函数(例如sort())可以就地改变原始对象并返回None

确保您没有将调用一个的结果存储在变量中。

主程序
my_list = ['c', 'b', 'a'] # ⛔️ TypeError: cannot unpack non-iterable NoneType object x, y, z = my_list.sort()

这些sort函数和许多其他内置函数返回None,因为它们改变了原始对象。

错误的另一个常见原因是具有仅在满足条件时才返回值的函数。

主程序
def get_list(l): if len(l) > 3: return l my_list = get_list(['one', 'two', 'three']) print(my_list) # 👉️ None # ⛔️ TypeError: cannot unpack non-iterable NoneType object a, b, c = my_list

函数中的if语句get_list仅在传入参数的长度大于 时运行3

在所有其他情况下,该函数不返回任何内容并最终隐式返回None

要解决错误,您要么必须检查函数是否没有返回
None,要么在不满足条件时返回默认值。

主程序
def get_list(l): if len(l) > 3: return l return ['', '', ''] # 👈️ return default value if condition not met my_list = get_list(['one', 'two', 'three']) print(my_list) # 👉️ ['', '', ''] a, b, c = my_list print(a, b, c) # 👉️ "", "", ""

现在,无论条件是否满足,函数都保证返回一个值。

结论

当我们尝试解包一个None值时,会出现 Python“TypeError: cannot unpack non-iterable NoneType object”。

要解决该错误,请追踪变量在何处被分配了 None 值并将分配更正为可迭代对象,例如列表或元组。