mirror of https://github.com/python/cpython
SF bug #699934: Obscure error message
Clarify error message for mro conflicts.
This commit is contained in:
parent
45c3941510
commit
83245b5828
|
@ -1062,6 +1062,10 @@ def consistency_with_epg():
|
||||||
(EditableScrollablePane, ScrollablePane, EditablePane,
|
(EditableScrollablePane, ScrollablePane, EditablePane,
|
||||||
Pane, ScrollingMixin, EditingMixin, object))
|
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():
|
def mro_disagreement():
|
||||||
if verbose: print "Testing error messages for MRO disagreement..."
|
if verbose: print "Testing error messages for MRO disagreement..."
|
||||||
def raises(exc, expected, callable, *args):
|
def raises(exc, expected, callable, *args):
|
||||||
|
@ -1079,9 +1083,9 @@ def mro_disagreement():
|
||||||
# Test some very simple errors
|
# Test some very simple errors
|
||||||
raises(TypeError, "duplicate base class A",
|
raises(TypeError, "duplicate base class A",
|
||||||
type, "X", (A, A), {})
|
type, "X", (A, A), {})
|
||||||
raises(TypeError, "MRO conflict among bases ",
|
raises(TypeError, mro_err_msg,
|
||||||
type, "X", (A, B), {})
|
type, "X", (A, B), {})
|
||||||
raises(TypeError, "MRO conflict among bases ",
|
raises(TypeError, mro_err_msg,
|
||||||
type, "X", (A, C, B), {})
|
type, "X", (A, C, B), {})
|
||||||
# Test a slightly more complex error
|
# Test a slightly more complex error
|
||||||
class GridLayout(object): pass
|
class GridLayout(object): pass
|
||||||
|
@ -1089,7 +1093,7 @@ def mro_disagreement():
|
||||||
class VerticalGrid(GridLayout): pass
|
class VerticalGrid(GridLayout): pass
|
||||||
class HVGrid(HorizontalGrid, VerticalGrid): pass
|
class HVGrid(HorizontalGrid, VerticalGrid): pass
|
||||||
class VHGrid(VerticalGrid, HorizontalGrid): pass
|
class VHGrid(VerticalGrid, HorizontalGrid): pass
|
||||||
raises(TypeError, "MRO conflict among bases ",
|
raises(TypeError, mro_err_msg,
|
||||||
type, "ConfusedGrid", (HVGrid, VHGrid), {})
|
type, "ConfusedGrid", (HVGrid, VHGrid), {})
|
||||||
|
|
||||||
def objects():
|
def objects():
|
||||||
|
|
|
@ -1076,7 +1076,10 @@ set_mro_error(PyObject *to_merge, int *remain)
|
||||||
}
|
}
|
||||||
n = PyDict_Size(set);
|
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;
|
i = 0;
|
||||||
while (PyDict_Next(set, &i, &k, &v) && off < sizeof(buf)) {
|
while (PyDict_Next(set, &i, &k, &v) && off < sizeof(buf)) {
|
||||||
PyObject *name = class_name(k);
|
PyObject *name = class_name(k);
|
||||||
|
|
Loading…
Reference in New Issue