Dear Python folks, here is a sequence of commands (ipython) that lead to a question. See my comments after leading '#':
In [1]: 2 in [1,2,3] Out[1]: True #nothing special here, of course 2 is in the list. In [2]: 2 in [1,2,3] == True Out[2]: False #This is somewhat surprising, as one would hope that '2 in [1,2,3]' #evaluates to 'True', and then we expect 'True'=='True' to hold. #However, maybe it is an issue of operator precedence. Let's add parenthesis: In [3]: (2 in [1,2,3]) == True Out[3]: True #Okay, so this does what we expect. #However, if it is an issue of operator precedence, then what is the #operation that is carried out at prompt [2] above? # #Presumably, we work out In [4]: [1,2,3] == True Out[4]: False #which is false. So effectively, The statement at [2] seems to boil down to In [5]: 2 in False --------------------------------------------------------------------------- exceptions.TypeError Traceback (most recent call last) /Volumes/Minmax250a/Users2/fangohr/<console> TypeError: iterable argument required But this throws an error! And so does the full expression (with paranthesis): In [6]: 2 in ([1,2,3] == True) --------------------------------------------------------------------------- exceptions.TypeError Traceback (most recent call last) /Volumes/Minmax250a/Users2/fangohr/<console> TypeError: iterable argument required So what is the story here? In my view, the statement in line [2] should either produce True (as in [3]), or throw an error (as in [6]). Why does [2] return False? Would people agree that this is a bug? Thank you for your time, Hans PS I have tested this with Python 2.4, and Python 2.5 (on debian etch) -- Hans Fangohr School of Engineering Sciences University of Southampton Phone: +44 (0) 238059 8345 Email: [EMAIL PROTECTED] http://www.soton.ac.uk/~fangohr _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor