跳到内容

repeated-isinstance-calls (PLR1701)

源自 Pylint 代码检查工具。

警告:此规则已被移除,其文档仅供历史参考。

修复总是可用的。

已移除

此规则与 SIM101 相同,应改用 SIM101。

作用

检查对同一对象重复调用 isinstance 的情况。

为什么这不好?

可以合并对同一对象重复进行的 isinstance 调用为单个调用。

修复安全性

此规则的修复在 Python 3.10 及更高版本中被标记为不安全,因为如果任何操作数本身是元组,则使用二元运算符 (|) 组合多个 isinstance 调用将在运行时失败。

例如,给定 TYPES = (dict, list),则 isinstance(None, TYPES | set | float) 将在运行时引发 TypeError,而 isinstance(None, set | float) 则不会。

示例

def is_number(x):
    return isinstance(x, int) or isinstance(x, float) or isinstance(x, complex)

建议改为

def is_number(x):
    return isinstance(x, (int, float, complex))

或者,对于 Python 3.10 及更高版本

def is_number(x):
    return isinstance(x, int | float | complex)

Options (选项)

参考