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