]> granicus.if.org Git - python/commitdiff
SF bug #699934: Obscure error message
authorRaymond Hettinger <python@rcn.com>
Wed, 12 Mar 2003 04:25:42 +0000 (04:25 +0000)
committerRaymond Hettinger <python@rcn.com>
Wed, 12 Mar 2003 04:25:42 +0000 (04:25 +0000)
Clarify error message for mro conflicts.

Lib/test/test_descr.py
Objects/typeobject.c

index 946a529221eef4af1cd74fa3717e5b08df6430ac..d925c7585c75d66cc36ba39f7127da151d4c51bb 100644 (file)
@@ -1062,6 +1062,10 @@ def consistency_with_epg():
           (EditableScrollablePane, ScrollablePane, EditablePane,
            Pane, ScrollingMixin, EditingMixin, object))
 
+mro_err_msg = """Cannot create class.The superclasses have conflicting
+inheritance trees which leave the method resolution order (MRO)
+undefined for bases """
+
 def mro_disagreement():
     if verbose: print "Testing error messages for MRO disagreement..."
     def raises(exc, expected, callable, *args):
@@ -1079,9 +1083,9 @@ def mro_disagreement():
     # Test some very simple errors
     raises(TypeError, "duplicate base class A",
            type, "X", (A, A), {})
-    raises(TypeError, "MRO conflict among bases ",
+    raises(TypeError, mro_err_msg,
            type, "X", (A, B), {})
-    raises(TypeError, "MRO conflict among bases ",
+    raises(TypeError, mro_err_msg,
            type, "X", (A, C, B), {})
     # Test a slightly more complex error
     class GridLayout(object): pass
@@ -1089,7 +1093,7 @@ def mro_disagreement():
     class VerticalGrid(GridLayout): pass
     class HVGrid(HorizontalGrid, VerticalGrid): pass
     class VHGrid(VerticalGrid, HorizontalGrid): pass
-    raises(TypeError, "MRO conflict among bases ",
+    raises(TypeError, mro_err_msg,
            type, "ConfusedGrid", (HVGrid, VHGrid), {})
 
 def objects():
index a067cd5963fbcbca1895368d93d043a82db6b196..b0297774b5c21fc860511442f3c218d5f5da0e14 100644 (file)
@@ -1076,7 +1076,10 @@ set_mro_error(PyObject *to_merge, int *remain)
        }
        n = PyDict_Size(set);
 
-       off = PyOS_snprintf(buf, sizeof(buf), "MRO conflict among bases");
+       off = PyOS_snprintf(buf, sizeof(buf), "Cannot create class.\
+The superclasses have conflicting\n\
+inheritance trees which leave the method resolution order (MRO)\n\
+undefined for bases");
        i = 0;
        while (PyDict_Next(set, &i, &k, &v) && off < sizeof(buf)) {
                PyObject *name = class_name(k);