Pycharm 预期类型 'optional\[bytes\]' 得到的是 'str'

新手上路,请多包涵

我正在使用 rsplit 来拆分路径名,

 rootPath = os.path.abspath(__file__)
rootPath = (rootPath.rsplit('/', 1)[0]).rsplit('/', 1)[0]

但是 Pycharm 警告说,

预期类型 optional [bytes] 得到 str 代替

python doc 中,它声明 _使用 sep 作为分隔符字符串_。

那么如何解决这个问题呢?

原文由 daiyue 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

似乎 rootPath 被视为字节对象(可能是一个小错误?)或者警告是针对另一部分的。

通常,PyCharm 和错误本质上是在警告您参数必须是 Nonebytes 。 That’s what Optional means, Optional[type] is either None or type which in your case is bytes .

在简单的 Python REPL 中,消息略有不同,但要点是相同的:

 b'hello/world'.rsplit('/') # error bytes-like object required

相反,您需要提供一个 byte 分隔符:

 b'hello/world'.rsplit(b'/')

None 以使其正常工作。

PyCharm 中存在一个小错误,它在此处报告 rsplit 错误,或者警告是针对您的代码的另一部分。

原文由 Dimitris Fasarakis Hilliard 发布,翻译遵循 CC BY-SA 3.0 许可协议

我早些时候遇到过这个:

 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”、“.”、“_”:

PyCharm 将字符串标记为错误

它说它期望 Optional[bytes]Union[bytes,int] ,但这段代码在 python 3.10、3.9 和 3.8 中运行得非常好。

我怀疑这是我最近选择的 Settings->Editor->Inspections->Code compatibility inspection 所以我禁用它并重新启动该窗口无济于事。

我在 .decode() 之后添加了 --- .stdout 以转换字节。这让 PyCharm 安静下来,但噪音接踵而至。在 python 3.10 .stdout 不是 bytesstr 我会得到一个错误:

AttributeError: ‘str’ 对象没有属性 ‘decode’。

在 python 文档中,我发现以 字节 为单位的方法名称与我在 str 中所做的相同

原文由 John 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题