New submission from Sergey Shashkov: __floordiv__ in module fraction fails with TypeError instead of returning NotImplemented when modulo is a class without __rtruediv__ or __mul__.
Code sample: class Foo(object): def __rdivmod__(self, other): return 'rdivmod works' from fractions import Fraction a = Fraction(1,1) b = Foo() print(divmod(1, b)) print(divmod(a, b)) __divmod__ in Fraction is inherited from class Real (numbers.py): def __divmod__(self, other): return (self // other, self % other) So __floordiv__ and __mod__ are called. def __floordiv__(a, b): """a // b""" return math.floor(a / b) def __mod__(a, b): """a % b""" div = a // b return a - b * div __floordiv__ if fractions.py makes a true division, and __mod__ makes multiplication. The following code will fix the problem: def __divmod__(self, other): if isinstance(a, numbers.Complex): return (self // other, self % other) else: return NotImplemented ---------- components: Library (Lib) messages: 253046 nosy: ShashkovS priority: normal severity: normal status: open title: __floordiv__ in module fraction fails with TypeError instead of returning NotImplemented type: behavior versions: Python 2.7, Python 3.2, Python 3.3, Python 3.4, Python 3.5, Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue25412> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com