Checking if a variable or parameter is None should only be done when you expect that it can be None. Doing so when the variable is always None or never None is confusing at best. At worse, there is a bug and the variable is not updated properly.

This rule raises an issue when expressions X is None, X is not None, X == None or X != None are constant, i.e. X is always None or never None.

Noncompliant Code Example

mynone = None
result = mynone is None: # Noncompliant. Always True.

if mynone == None: # Noncompliant. Always True.
    pass

if mynone is not None:  # Noncompliant. Always False.
    pass

if mynone == None:  # Noncompliant. Always False.
    pass

myint = 42
result = myint is None: # Noncompliant. Always False.

if myint == None: # Noncompliant. Always False.
    pass

if myint is not None:  # Noncompliant. Always True.
    pass

if myint == None:  # Noncompliant. Always True.
    pass

See