Pylint 抱怨将字符串与带有“is”的文字进行比较 [重复]

Posted

技术标签:

【中文标题】Pylint 抱怨将字符串与带有“is”的文字进行比较 [重复]【英文标题】:Pylint complains about comparing a string to a literal with 'is' [duplicate] 【发布时间】:2018-05-26 12:12:22 【问题描述】:

考虑这段代码sn-p:

my_string = 'asdf'
print(my_string is 'xfje') #R0123

Pylint 在第二行返回推荐 R0123,而我在 error message wiki 上找不到该推荐。不过,this part of the docs 中提到了它:

文字比较 (R0123):

与文字比较 用于将对象与文字进行比较,这通常是您不希望做的,因为您可以与完全不同的文字进行比较。

这个解释对我一点帮助都没有。我知道使用 is 在两个字符串对象之间进行比较可能会导致与预期不同的结果,但是对于对象与文字的比较,它与 == 相同。而当使用==时,错误消失了。

为什么我不应该在这里使用is

【问题讨论】:

也许你会发现这个 SO answer 更有帮助。 "但是对于对象与文字的比较,它与== 相同" - 你到底是从哪里得到这个想法的? @user2357112 我在提示符中尝试了它,它按预期工作。但是,是的,我没有阅读任何文档。 【参考方案1】:

is 检查左侧参数是否与右侧参数保持完全相同的引用。这对于作为单例的None 来说很好,但对于其他类型通常是个坏主意,因为多个实例可以具有相同的逻辑值。

考虑一下,例如下面的例子:

>>> my_string = ''.join([c for c in 'xfje'])
>>> print my_string
xfje
>>> print my_string == 'xfje'
True
>>> print my_string is 'xfje'
False

【讨论】:

您不应使用isTrueFalse 进行比较。 Source(最后一个要点) @Coal_ 好点。编辑并删除了这些示例。 Daniel,我不完全确定是这种情况 - 检查 x is True 可确保 x 不会通过 x == Truex = 1 的检查 1 == True 在 Python 中的计算结果为 True,这是我的观点; boolint 的子类

以上是关于Pylint 抱怨将字符串与带有“is”的文字进行比较 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

正确使用range(),为啥pylint会抱怨:不迭代时引用了range built-in

Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法

pytest 固定装置从外部范围重新定义名称 [pylint]

如何在带有来自 std::string 的 unordered_map 的字符串文字上使用 is_transparent 功能?

4.3 每日一练

markdown 如何使用带有颜色的pylint