[Python-bugs-list] [ python-Bugs-699934 ] Obscure error message
SourceForge.net
noreply@sourceforge.net
Sun, 06 Apr 2003 06:35:26 -0700
Bugs item #699934, was opened at 2003-03-08 12:29
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=699934&group_id=5470
Category: Python Interpreter Core
Group: Python 2.3
Status: Open
Resolution: Fixed
Priority: 5
Submitted By: Bjorn Pettersen (bpettersen)
Assigned to: Raymond Hettinger (rhettinger)
Summary: Obscure error message
Initial Comment:
>>> class A(object):
... m = 1
...
>>> class B(A): pass
...
>>> class C(A): pass
...
>>> class D(A,B): pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: MRO conflict among bases A, B
I happen to know what MRO stands for, but probably
most people that made the typo I did in the diamond
inheritance graph will have no idea what they did wrong...
How about "One of the declared superclasses A, B
inherits from the other, the method resolution order
(MRO) would therefore be undefined. Cannot create
class."
-- bjorn
----------------------------------------------------------------------
>Comment By: Michael Hudson (mwh)
Date: 2003-04-06 14:35
Message:
Logged In: YES
user_id=6656
I'd say "idea 2". the issues too complicated to have a hope
of explaining in the error message, so the only hope is to
hand out enough key words to make finding the relavent
section of the docs easy.
I'd also like to say:
The "of course, while I have no problem with this at all,
it's surely too much for a lesser being" flavor of argument
always rings hollow to me. -- Tim Peters, 29 Apr 1998
----------------------------------------------------------------------
Comment By: Raymond Hettinger (rhettinger)
Date: 2003-04-06 11:10
Message:
Logged In: YES
user_id=80475
Michael, do you have a preference?
----------------------------------------------------------------------
Comment By: Raymond Hettinger (rhettinger)
Date: 2003-03-14 06:34
Message:
Logged In: YES
user_id=80475
Idea 1
------
TypeError: Cannot create class.
Accessing superclasses A, B in order creates conflicting
inheritance trees which leave the method resolution order
(MRO) undefined.
Idea 2
------
Cannot create a consistent method resolution order (MRO)
for bases A, B.
Idea 3
------
Doh!
----------------------------------------------------------------------
Comment By: Michael Hudson (mwh)
Date: 2003-03-12 13:01
Message:
Logged In: YES
user_id=6656
Unfortunately the new error message makes no sense when you
get it by rearranging __bases__.
----------------------------------------------------------------------
Comment By: Raymond Hettinger (rhettinger)
Date: 2003-03-12 04:38
Message:
Logged In: YES
user_id=80475
Fixed. See:
Objects/typeobject.c 2.216
Lib/test/test_descr.py 1.187
----------------------------------------------------------------------
Comment By: Bjorn Pettersen (bpettersen)
Date: 2003-03-12 02:50
Message:
Logged In: YES
user_id=556638
Even better. If I were to suggest anything, it would be to
add "(lookup)" after "resolution" since that seems to be the
more frequently used terminology -- not a big issue though.
----------------------------------------------------------------------
Comment By: Raymond Hettinger (rhettinger)
Date: 2003-03-12 01:29
Message:
Logged In: YES
user_id=80475
I don't think the first part of the sentence is accurate.
MRO conflicts can arise for less straight-forward reasons.
How about:
"Cannot create class. Superclasses A, B have conflicting
inheritance trees which leave the method resolution order
(MRO) undefined."
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=699934&group_id=5470