Some people find this legal syntax confusing:
A in B < C
(It means A in B and B < C.)
I feel like most code reviews would not allow this kind of code to be checked in, at least without a comment explaining what the code does. What are the motivating reasons for allowing this syntax? Is there any idiomatic code that uses it?
If not, I suggest dividing the comparison operators into two groups:
in, not in, is, is not
<, >, <=, >=, ==, !=
and then disallowing chaining of operators from both groups.
For example, still allowed:
A <= B <= C
A in B in C
A < B in C
The advantage of such a change is that there is fewer "gotcha" code. I admit that this code is rarely written, but it can come up. For example, you might write your own comparison operator and then want to see if it's working:
A < B is None
returns false if B is not None even if A < B returns None.
Also, in my opinion, the existence is a deterrent to Python and takes away from Python's beauty as a language.
The downside of such a change is that the language is more complicated.
As far as implementation goes, this can be done after parsing when the AST is checked and errors are raised (from what I remember).