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
价值来源是:
- 有一个不返回任何东西的函数(
None
隐式返回)。 - 将变量显式设置为
None
. - 将变量分配给调用不返回任何内容的内置函数的结果。
- 具有仅在满足特定条件时才返回值的函数。
不显式返回值的函数 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 值并将分配更正为可迭代对象,例如列表或元组。