序列项 0:预期的 str 实例,未找到 NoneType

序列项 0:预期的 str 实例,未找到 NoneType

Sequence item 0: expected str instance, NoneType found

当我们join()使用包含一个或多个None值的可迭代对象调用方法时,会出现 Python“TypeError: sequence item 0: expected str instance, NoneType found”。

要解决错误,请找出None值的来源或在调用之前过滤掉它们join

typeerror sequence item 0 预期的 str 实例 nonetype 找到

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

主程序
my_list = [None, None, 'a', 'b'] # ⛔️ TypeError: sequence item 0: expected str instance, NoneType found result = ''.join(my_list)

如果可迭代对象中有任何非字符串值,join方法将引发一个。TypeError

解决错误的最好方法是找出None 可迭代对象中的值来自何处并更正分配。

最常见的None价值来源是:

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

如果None要从可迭代对象中过滤掉值,请使用该
filter()函数。

主程序
my_list = [None, None, 'a', 'b'] result = ''.join(filter(lambda x: x if x is not None else '', my_list)) print(result) # 👉️ 'ab'

如果您的 iterable 包含其他非字符串类型的值,请确保将它们传递给str()类以将它们转换为字符串,然后再将它们传递给
join().

主程序
my_list = [None, None, 'a', 'b'] result = ''.join(filter(lambda x: str(x) if x is not None else '', my_list)) print(result) # 👉️ 'ab'

filter函数接受一个函数和一个可迭代对象作为参数,并从可迭代对象的元素构造一个迭代器,函数返回一个真值。

如果您传递None函数参数,则 iterable 的所有虚假元素都将被删除。

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

请注意,TypeError如果可迭代对象中有任何非字符串值,该方法将引发 a。

如果您的列表包含数字或其他类型,请在调用之前将所有值转换为字符串join()

主程序
my_list = ['a', 'b', 1, 2] all_strings = list(map(str, my_list)) print(all_strings) # 👉️ ['a', 'b', '1', '2'] result = ''.join(all_strings) print(result) # 👉️ "ab12"

调用该方法的字符串用作元素之间的分隔符。

主程序
my_list = ['a', 'b', 'c'] my_str = '-'.join(my_list) print(my_str) # 👉️ "a-b-c"

如果您不需要分隔符而只想将可迭代的元素连接到一个字符串中,请在join()空字符串上调用该方法。

主程序
my_list = ['a', 'b', 'c'] my_str = ''.join(my_list) print(my_str) # 👉️ "abc"

结论

当我们join()使用包含一个或多个None值的可迭代对象调用方法时,会出现 Python“TypeError: sequence item 0: expected str instance, NoneType found”。

要解决错误,请找出None值的来源或在调用之前过滤掉它们join