跳到内容

strip-with-multi-characters (B005)

源自 flake8-bugbear linter。

作用

检查在 .strip().lstrip().rstrip() 调用中使用多字符字符串的情况。

为什么这不好?

.strip().lstrip().rstrip() 的调用中的所有字符都会从字符串的开头和结尾处移除。如果字符串包含多个字符,读者可能会误以为正在移除前缀或后缀,而不是一组字符。

在 Python 3.9 及更高版本中,您可以使用 str.removeprefixstr.removesuffix 分别从字符串中移除精确的前缀或后缀,如果可能,应优先使用它们。

已知问题

作为一种启发式方法,此规则仅标记包含重复字符的多字符字符串。这允许像 .strip("xyz") 这样的用法,它从字符串的开头和结尾处移除所有出现的字符 xyz,但不允许 .strip("foo")

使用唯一的、多字符字符串可能是有意的,并且符合 .strip().lstrip().rstrip() 的意图,而使用重复字符字符串很可能是一个错误。

示例

"text.txt".strip(".txt")  # "e"

建议改为

"text.txt".removesuffix(".txt")  # "text"

参考