我正在使用rsplit
来拆分路径名。
rootPath = os.path.abspath(__file__)
rootPath = (rootPath.rsplit('/', 1)[0]).rsplit('/', 1)[0]
但是 Pycharm 给出了警告:
期望类型为
optional [bytes]
,实际得到的是str
在 Python 文档
中,它说明了使用 sep
作为分隔符字符串。
那么如何修复这个问题呢?
我正在使用rsplit
来拆分路径名。
rootPath = os.path.abspath(__file__)
rootPath = (rootPath.rsplit('/', 1)[0]).rsplit('/', 1)[0]
但是 Pycharm 给出了警告:
期望类型为
optional [bytes]
,实际得到的是str
在 Python 文档
中,它说明了使用 sep
作为分隔符字符串。
那么如何修复这个问题呢?
看起来rootPath
被视为字节对象(可能是个小错误?)或警告是针对其他部分的。
总体而言,PyCharm和错误本质上是在提醒你该参数必须是None
或bytes
。这就是Optional
的意思,Optional[type]
是None
或类型type
,在你的情况下是bytes
。
在简单的Python REPL中,消息略有不同,但要点相同:
b'hello/world'.rsplit('/') # error bytes-like object required
你需要提供一个 byte
分隔符:
b'hello/world'.rsplit(b'/')
为了让它工作,需要使用 None
。
要么PyCharm中有一个小错误,它在这里错误地报告了rsplit
,要么警告是针对你代码的另一部分。
我之前遇到过这个问题:
import subprocess
result = subprocess.run(
"ls /etc/systemd/system",
shell=True, capture_output=True, text=True
)
for line in result.stdout.split("\n"):
if "banana" in line:
print(line.split(".")[0].strip().split("_"))
PyCharm开始高亮显示:"\\n"、"banana"、"."、"_":
它表示期望 Optional[bytes]
或 Union[bytes,int]
,但是这段代码在 Python 3.10、3.9 和 3.8 中都可以正常运行。
我怀疑是最近选择了“设置->编辑器->检查->代码兼容性检查”,所以我将其禁用并重新启动了该窗口,但无济于事。
我在.stdout
之后添加了 .decode()
来转换字节。这使 PyCharm 安静了下来,但又带来了一些噪音。在 Python 3.10 中,.stdout
不是 bytes
而是 str
,我会收到一个错误:
AttributeError: 'str' object has no attribute 'decode'.
我也曾遇到同样的问题,但找到了一个稍有不同的解决方案 - 我想为那些未来可能遇到相同问题的人添加这个解决方案。
rootPath = os.path.abspath(__file__)
rootPath = str(rootPath.rsplit('/', 1)[0]).rsplit('/', 1)[0]