TypeError: join() 参数必须是 str 或 bytes 而不是 ‘list’

目录

TypeError: join() argument must be str or bytes not ‘list’

  1. TypeError: join() 参数必须是 str 或 bytes 而不是 ‘list’
  2. TypeError: join() 参数必须是 str 或 bytes 而不是 NoneType

TypeError: join() 参数必须是 str 或 bytes 而不是 ‘list’

当我们将列表传递给方法时,会出现 Python“TypeError: join() argument must be str, bytes, or os.PathLike object, not ‘list’” os.path.join()

要解决该错误,请使用for循环将列表的每一项传递给该方法,或者在调用中解压缩列表项。

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

主程序
import os my_list = ['home/alice', 'home/bob'] # ⛔️ TypeError: join() argument must be str, bytes, or os.PathLike object, not 'list' result = os.path.join('/', my_list)

我们将一个列表传递给os.path.join()导致错误的方法。

使用for循环解决错误

如果需要将列表中的每个字符串连接到指定的根路径,请使用
for 循环

主程序
import os my_list = ['home/alice', 'home/bob'] for path in my_list: result = os.path.join('/', path) print(result) # 👉️ "/home/alice", "/home/bob"

我们使用for循环遍历列表,在每次迭代中,我们使用该
os.path.join()方法智能地连接路径。

解包列表解决错误

如果您需要将列表中的所有路径连接到一个路径中,请在对该os.path.join()方法的调用中解压缩它们。

主程序
import os my_list = ['home', 'alice', 'images'] result = os.path.join('/', *my_list) print(result) # 👉️ /home/alice/images

os.path.join方法智能地连接一个
或多个路径。

该方法将提供的路径与除最后一个以外的每个非空部分后面的一个目录分隔符连接起来。

如果提供的任何组件是绝对路径,则所有先前的组件都将被丢弃,并从绝对路径开始继续连接。

TypeError: join() 参数必须是 str 或 bytes 而不是 NoneType

None当我们将值传递给
方法
时,会出现 Python“TypeError: join() argument must be str, bytes, or os.PathLike object, not ‘NoneType’”
os.path.join()

要解决错误,请更正分配,或提供备用值以防变量存储None.

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

主程序
import os my_path = None # ⛔️ TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType' result = os.path.join('/', my_path)

我们将一个None值传递给os.path.join()导致错误的方法,因为该方法采用字符串参数。

要解决该错误,您必须弄清楚变量在何处被赋值并更正赋值。 None

Python 中 None 值的常见来源

最常见的None价值来源是:

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

不返回任何内容的函数返回 None

不显式返回值的函数 return None

主程序
import os # 👇️ this function returns None def get_path(): print('home/alice') # ⛔️ TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType' result = os.path.join('/', get_path())

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

主程序
import os def get_path(): return 'home/alice' result = os.path.join('/', get_path()) print(result) # 👉️ '/home/alice'

该函数现在返回一个字符串,因此一切都按预期进行。

检查变量是否不存储 None

如果您需要在使用该方法之前if检查变量是否未存储值,
请使用语句
Noneos.path.join()

主程序
import os my_path = None if my_path is not None: result = os.path.join('/', my_path) print(result) else: # 👇️ this runs print('variable stores a None value')

或者,您可以提供一个空字符串作为后备(如果适合您的用例)。

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

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

os.path.join方法智能地连接一个
或多个路径。

该方法将提供的路径与除最后一个以外的每个非空部分后面的一个目录分隔符连接起来。

如果提供的任何组件是绝对路径,则所有先前的组件都将被丢弃,并从绝对路径开始继续连接。

有一个只有在满足条件时才返回值的函数

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

主程序
import os def get_path(p): if len(p) > 10: return p my_path = get_path('alice') print(my_path) # ⛔️ TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType' result = os.path.join('/', my_path)

if函数中的语句get_path在传入参数的长度大于 时运行10

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

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

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: