p = os.fspath(p) TypeError: expected str, bytes or os.PathLike object, not list
时间: 2023-09-28 09:05:48 浏览: 227
解决TypeError: expected str, bytes or os.PathLike object, not int
这个错误通常是由于 `os.fspath()` 函数的参数被传递为一个列表,而不是一个字符串或 `path-like` 对象。在 Python 中,`os.fspath()` 函数需要一个字符串类型的路径或 `path-like` 对象作为参数。`path-like` 对象是指实现了 `__fspath__()` 方法的对象,例如 `pathlib.Path` 对象。
你可以检查一下传递给 `os.fspath()` 函数的参数,看看它是否是一个列表。如果是,你需要将其转换为一个字符串或 `path-like` 对象,例如:
```
p = args.path[0] # 将列表中的第一个元素作为路径
if isinstance(p, (str, bytes)):
p = os.fspath(p)
elif hasattr(p, '__fspath__'):
p = p.__fspath__()
else:
raise TypeError("Expected str, bytes, or os.PathLike object, but got {!r}".format(p))
```
这个代码段首先检查 `p` 是否是字符串或字节类型,如果是,则使用 `os.fspath()` 函数将其转换为路径字符串。如果不是字符串或字节类型,则检查它是否具有 `__fspath__()` 方法。如果有,则调用该方法获取路径字符串。如果既不是字符串也不是具有 `__fspath__()` 方法的对象,则抛出一个 `TypeError` 异常。
阅读全文