Cyril Bazin wrote: > Ok, ok, there was a mistake in the code. > (Of course, it was done on prupose in order to verify if everybody is > aware ;-) > I don't know why it is preferable to compare an object to the object > "None" using "is not". > "==" is, IMHO, more simple. Simple is better than complex.. So I use "==".
The archives could tell you more, but basically on is usually interested in *identity* with a singleton object (None), not in whether the object on is examining happens to compare equal. A custom object could be designed to compare equal to None in certain cases, even though it *is not* None, leading to the "== None" approach being defective code. In the specific code in question, it won't make any differences, but I pointed it out to help folks who don't know this to start developing the safer habit, which is always to use "is" and "is not" with None (or, generally, with other singletons). > The correct program is: > > import urllib2 > for line in open("fileName.txt"): > addr, port = urllib2.splitport (line) > print (port == None) and '' or port Nope, sorry... the point is that the "and/or" pseudo-ternary operator is inherently flawed if the operand after "and" evaluates False. Check this out: >>> port = None >>> print (port == None) and '' or port None >>> print (port != None) and '' or port None and even: >>> print (port is None) and '' or port None So the bug isn't in using "!=" instead of "==", or using equality instead of identity comparison, it is in trying to use the and/or expression for a purpose it wasn't intended for. > or > > import urllib2 > for line in open("fileName.txt"): > addr, port = urllib2.splitport(line) > if port == None: > print '' > else: > print port That should work nicely... and it's more readable too! Note that in Python 2.5 you should be able to write this as print '' if port is None else port or print '' if (port is None) else port but it's quite arguable whether that is better than the simple if/else statement in this case. -Peter -- http://mail.python.org/mailman/listinfo/python-list