On Sat, 24 Dec 2011 23:09:50 -0800, GZ wrote: > I run into a weird problem. I have a piece of code that looks like the > following: > > f(...., a=None, c=None): > assert (a==None)==(c==None) > > > The problem is that == is not implemented sometimes for values in a > and c, causing an exception NotImplementedError.
I have no idea how that can happen. If a.__eq__(None) returns NotImplemented, the interpreter should flip the test and perform the equivalent of None.__eq__(a), which will return False. > So how do I reliably test if a value is None or not? As Paul says, use "is" to check whether a value _is_ None. Checking for equality is almost certainly the wrong thing to do; nothing should compare equal to None except for None itself, so "x is None" and "x == None" shouldn't produce different results unless there's a bug in the comparison method. -- http://mail.python.org/mailman/listinfo/python-list