TypeError:只能在 Python 中加入可迭代对象

TypeError: 只能在 Python 中加入一个可迭代对象

TypeError: can only join an iterable in Python

Python“TypeError: can only join an iterable”发生在我们将不可迭代的值传递给str.join()方法时,例如None调用不返回任何内容的内置方法。要解决错误,请确保将可迭代对象传递给该join()方法。

typeerror 只能加入一个可迭代对象

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

主程序
fruits = ['kiwi', 'banana', 'apple'] new_list = fruits.reverse() print(new_list) # 👉️ None # ⛔️ TypeError: can only join an iterable my_str = ','.join(new_list) # 👈️ passing None to join() print(my_str)

导致错误的原因是该reverse()方法就地改变了原始列表并且不返回任何内容(隐式返回None)。

确保您调用join()的结果不是调用方法(例如reverseor sort)或不返回任何内容(returns None)的函数。

要解决错误,我们必须确保将可迭代对象传递给str.join()
方法,例如 a
list或 a tuple

主程序
fruits = ['kiwi', 'banana', 'apple'] fruits.reverse() my_str = ','.join(fruits) print(my_str) # 👉️ 'apple,banana,kiwi'

我们将实际列表传递给str.join()解决错误的方法。

你应该打印你正在调用的值join()并确保它是一个可迭代的。

如果值为None,则最常见的None值来源是:

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

str.join方法将一个可迭代对象作为参数并返回一个字符串,该字符串是可迭代对象中字符串的串联。

如果您传递给该join()方法的值是None,请确保您没有使用不返回任何内容的函数的结果调用它。

主程序
# 👇️ this function returns None def get_list(): print(['kiwi', 'banana', 'apple']) my_str = ' '.join(get_list())

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

主程序
def get_list(): return ['kiwi', 'banana', 'apple'] my_str = ' '.join(get_list()) print(my_str) # 👉️ "kiwi banana apple"

如果您需要在将变量加入字符串之前if检查变量是否未存储
值,
请使用语句。
None

主程序
my_list = None if my_list is not None: my_str = ' '.join(my_list) print(my_str) else: # 👇️ this runs print('variable stores None')

或者,您可以提供一个空列表作为后备。

主程序
my_list = None if my_list is None: my_list = [] my_str = ','.join(my_list) print(my_str) # 👉️ ''
请注意,有许多内置函数(例如sort())可以就地改变原始对象并返回None

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

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

主程序
def get_list(a): if len(a) > 3: return a # 👇️ None my_list = get_list(['a', 'b'])

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

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

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

主程序
def get_list(a): if len(a) > 3: return a return [] # 👈️ return empty list if condition not met # 👇️ [] my_list = get_list(['a', 'b'])

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

结论

Python“TypeError: can only join an iterable”发生在我们将不可迭代的值传递给str.join()方法时,例如None调用不返回任何内容的内置方法。要解决错误,请确保将可迭代对象传递给该join()方法。

发表评论