关于python:pylint抱怨将字符串与文本与”is”进行比较

Pylint complains about comparing a string to a literal with 'is'

本问题已经有最佳答案,请猛点这里访问。

请考虑以下代码段:

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

pylint在第二行返回一个建议R0123,在错误消息wiki上找不到该建议。不过,在这部分文档中提到了这一点:

literal-comparison (R0123):

Comparison to literal Used when comparing an object to a literal, which is usually what you do not want to do, since you can compare to a different literal than what was expected altogether.

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

我为什么不在这里使用is


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

请考虑以下示例:

1
2
3
4
5
6
7
>>> my_string = ''.join([c for c in 'xfje'])
>>> print my_string
xfje
>>> print my_string == 'xfje'
True
>>> print my_string is 'xfje'
False