Bugs item #1086096, was opened at 2004-12-15 17:10 Message generated for change (Comment added) made by goodger You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1086096&group_id=5470
Category: Python Interpreter Core Group: Python 2.4 >Status: Closed >Resolution: Rejected Priority: 5 Submitted By: Stefan Seefeld (stefan) Assigned to: Nobody/Anonymous (nobody) Summary: two strings holding the same value have different id Initial Comment: I'v run into a problem with a program that expects a string to be either 'resource' or 'test': type = ... if type is "resource": do_something() elif type is "test": do_something_else() The above comparison using 'is' works fine with python 2.3, but fails with python 2.4. Unfortunately I wasn't able to isolate the problem. To reproduce: Install qmtest from http://www.qmtest.com on windows xp with python 2.4 (I don't know yet whether other platforms are affected, too). Then follow the instructions from http://www.codesourcery.com/public/qmtest/qm-2.2/manual.html up to section 2.2 'Starting the Graphical Interface'. In the browser, click on the 'exec1' test, and you'll get an 'UnboundLocalError' because the application logic didn't expect some comparison to fail. The failed comparison in question is 't is "test"', which returns 'False' even though t == "test". ---------------------------------------------------------------------- >Comment By: David Goodger (goodger) Date: 2004-12-15 18:14 Message: Logged In: YES user_id=7733 I fully agree with Tim. If the example code worked before, it was accidental. "is" tests identity. ``"resource" is "resource"`` may create two independent string objects. Use "==" instead. Closed the bug report. ---------------------------------------------------------------------- Comment By: Tim Peters (tim_one) Date: 2004-12-15 17:27 Message: Logged In: YES user_id=31435 Sorry, the only bug I see here is in the code you posted using "is" to try to determine whether two strings are equal. "is" tests for object identity, not for equality, and whether two immutable objects are really the same object isn't in general defined by Python. You should use "==" to check two strings for equality. The only time it's reliable to use "is" for that purpose is when you've explicitly interned all strings being compared (via using the intern() builtin function). ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1086096&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com