why () is () and [] is [] work in other way?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Fri Apr 27 07:23:03 EDT 2012


On Thu, 26 Apr 2012 11:31:39 -0700, John Nagle wrote:

>     I would suggest that "is" raise ValueError for the ambiguous cases.
> If both operands are immutable, "is" should raise ValueError. That's the
> case where the internal representation of immutables shows through.

You've already made this suggestion before. Unfortunately you failed to 
think it through: it would break *nearly all Python code*, and not just 
"broken" code. It would break code that relies on documented language 
features. It would break code that applies a standard Python idiom. I 
count at least 638 places where your suggestion would break the standard 
library.

[steve at ando ~]$ cd /usr/local/lib/python3.2/
[steve at ando python3.2]$ grep "if .* is None:" *.py | wc -l
638

That's an average of four breakages per module.


>     If this breaks a program, it was broken anyway.  

Incorrect. Your suggestion breaks working code for no good reason.

Astonishingly, your suggestion doesn't break code that actually is broken:

def spam(arg=None):
    if arg == None:
       ...

actually is broken, since it doesn't correctly test for the sentinel. You 
can break it by passing an object which compares equal to None but isn't 
actually None.


-- 
Steven



More information about the Python-list mailing list