[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