changeset: 97444:94d0c219d46f parent: 97442:80b3930b86ef parent: 97443:73984e665bf5 user: Yury Selivanov date: Tue Aug 18 14:23:02 2015 -0400 files: Misc/NEWS description: Merge 3.5 (issue #23572) diff -r 80b3930b86ef -r 94d0c219d46f Lib/functools.py --- a/Lib/functools.py Tue Aug 18 13:27:30 2015 -0400 +++ b/Lib/functools.py Tue Aug 18 14:23:02 2015 -0400 @@ -567,7 +567,7 @@ break # reject the current head, it appears later else: break - if not candidate: + if candidate is None: raise RuntimeError("Inconsistent hierarchy") result.append(candidate) # remove the chosen candidate diff -r 80b3930b86ef -r 94d0c219d46f Lib/test/test_functools.py --- a/Lib/test/test_functools.py Tue Aug 18 13:27:30 2015 -0400 +++ b/Lib/test/test_functools.py Tue Aug 18 14:23:02 2015 -0400 @@ -1491,6 +1491,24 @@ many_abcs = [c.Mapping, c.Sized, c.Callable, c.Container, c.Iterable] self.assertEqual(mro(X, abcs=many_abcs), expected) + def test_false_meta(self): + # see issue23572 + class MetaA(type): + def __len__(self): + return 0 + class A(metaclass=MetaA): + pass + class AA(A): + pass + @functools.singledispatch + def fun(a): + return 'base A' + @fun.register(A) + def _(a): + return 'fun A' + aa = AA() + self.assertEqual(fun(aa), 'fun A') + def test_mro_conflicts(self): c = collections @functools.singledispatch