ComparePrimitivesByEqualRule

Enforces the use of == and != in comparisons to primitives rather than is and is not. The == operator checks equality (https://docs.python.org/3/reference/datamodel.html#object.__eq__), while is checks identity (https://docs.python.org/3/reference/expressions.html#is).

Message

Don’t use is or is not to compare primitives, as they compare references. Use == or != instead.

Has Autofix: Yes

VALID Code Examples

# 1:

a == 1

# 2:

a == '1'

# 3:

a != '1'

# 4:

'3' == '1'

# 5:

3 == '1'

# 6:

3 > 2 > 1

# 7:

3 > 2 > '1'

# 8:

a is b > 1

# 9:

a is b is c

# 10:

1 > b is c

INVALID Code Examples

# 1:

a is 1

Autofix:

---
+++
@@ -1 +1 @@
-a is 1
+a == 1

# 2:

a is '1'

Autofix:

---
+++
@@ -1 +1 @@
-a is '1'
+a == '1'

# 3:

a is f'1{b}'

Autofix:

---
+++
@@ -1 +1 @@
-a is f'1{b}'
+a == f'1{b}'

# 4:

a is not f'1{d}'

Autofix:

---
+++
@@ -1 +1 @@
-a is not f'1{d}'
+a != f'1{d}'

# 5:

1 is a

Autofix:

---
+++
@@ -1 +1 @@
-1 is a
+1 == a

# 6:

'2' > '1' is a

Autofix:

---
+++
@@ -1 +1 @@
-'2' > '1' is a
+'2' > '1' == a

# 7:

3 > a is 2

Autofix:

---
+++
@@ -1 +1 @@
-3 > a is 2
+3 > a == 2

# 8:

1  is   2

Autofix:

---
+++
@@ -1 +1 @@
-1  is   2
+1  ==   2