Tiniest way to reproduce:
>>> class X(object):
... def __mul__(self, other): return '%r???' % other
...
>>> x=X()
>>> 23*x
'23???'
>>> 2.3*x
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: can't multiply sequence to non-int
>>>
weird error message hints at cause: Objects/typeobject.c sets sq_repeat slot indifferently for both __mul__ AND __rmul__, then Objects/abstract.c function PyNumber_Multiply checks both operands for sq_repeats, finds it in the RHO and thus calls
sequence_repeat which erroneously succeeds when the LHO
is 23 and fails w/weird error message when it's 2.3.
I'm leaving this unassigned because it's anything but obvious to me what the fix should be! If anybody HAS obvious fixes to
suggest I'll be glad to implement and commit them, though.
|