On Mon, Mar 17, 2008 at 6:49 PM, Guido van Rossum <[EMAIL PROTECTED]> wrote: .. > Really? Under which version exactly? On which platform? I cannot > reproduce this with either 2.4, 2.5 or 2.6 on OS X.
Just retested in Python 2.6a1+ (trunk:61449M, Mar 17 2008, 17:29:21) [GCC 3.4.6 20060404 (Red Hat 3.4.6-3)] on linux2 and Python 2.5 (r25:51908, Nov 24 2006, 11:03:50) [GCC 3.4.4 20050721 (Red Hat 3.4.4-2)] on linux2 I don't have my PowerBook here, but I am sure I've seen in on Mac OS too. Only new-style class behavior is problematic. The following code prints 'b' for me: __metaclass__ = type class x: pass class y(x): pass try: raise y except y: print "a" except: print "b" > Which one would expect regardless of the metaclass, right? Yes. > I have no idea what you are talking about. Can you quote a file, > revision and line number where this is done? > Sorry for the lack of details. The code in question is at trunk/Python/errors.c:108 as of r61467: """ if (PyExceptionClass_Check(err) && PyExceptionClass_Check(exc)) { /* problems here!? not sure PyObject_IsSubclass expects to be called with an exception pending... */ return PyObject_IsSubclass(err, exc); } return err == exc; """ (flushed left hoping it won't get garbled) As you can see, subclass check is only performed if PyExceptionClass_Check(err) passes, which includes a check for err being derived from BaseException (see Include/pyerrors.h). This logic allows returning err == exc when err is a string. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com