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@ando ~]$ cd /usr/local/lib/python3.2/
[steve@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
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to