跳到内容

invalid-pathlib-with-suffix (PTH210)

派生自 flake8-use-pathlib linter。

有时提供修复。

作用

检查 pathlib.Path.with_suffix() 调用,其中给定的后缀没有前导点,或者给定的后缀是单个点 "." 且 Python 版本低于 3.14。

为什么这不好?

如果给定的后缀没有以点开头,或者在 Python 3.14 之前的版本中,如果后缀是单个点 ".",则 Path.with_suffix() 将在运行时引发错误。

示例

from pathlib import Path

path = Path()

path.with_suffix("py")

建议改为

from pathlib import Path

path = Path()

path.with_suffix(".py")

已知问题

此规则很可能存在误报,因为 Ruff 只有在确定绑定在运行时引用 Path 对象时才会发出 lint。由于类型推断的限制,Ruff 目前只有在看到绑定来自用 Path 注释的函数参数或直接赋值给 Path() 构造函数调用时,才能确定这一点。

修复安全性

此规则的修复方法是在传递给 with_suffix() 调用的字符串中添加前导句点。此修复被标记为不安全,因为它会更改运行时行为:该调用以前总是会引发异常,但现在不会了。

此外,不可能确定这是否是给定情况的正确修复(字符串可能是正确的,但完全被传递给错误的方法,例如)。

如果给定后缀 ".",则不提供修复,因为意图不明确。