abcd a écrit : > x = None > result = (x is None and "" or str(x)) > > print result, type(result) > > --------------- > OUTPUT > --------------- > None <type 'str'> > > > y = 5 > result = (y is 5 and "it's five" or "it's not five") > > print result > > ------------- > OUTPUT > ------------- > it's five > > ...what's wrong with the first operation I did with x? I was expecting > "result" to be an empty string, not the str value of None. >
the "<condition> and <if_true> or <if_false>" is NOT a ternary operator but an ugly hack that breaks in some situations. It just happens that you stumbled on one of those situations : <if_true> must never evaluate as False. Please, do not use that ugly hack anymore and do a proper if block. Or use Python 2.5 with the official ternary operator ;) -- http://mail.python.org/mailman/listinfo/python-list