On Sun, Jan 26, 2014 at 8:52 PM, Nick Coghlan <ncogh...@gmail.com> wrote:
> There's also the fact that breaking working code in a maintenance release > is always dubious, especially when there's no current supported way to get > the equivalent behaviour prior to the maintenance release. This is the kind > of change that will require a note in the "porting to Python 3.5" section > of the What's New, again suggesting strongly that we can't change it in the > maintenance releases. It looks like there is more than one bug related to passing negative times as a keyword argument: >>> from itertools import * >>> ''.join(repeat('a', times=-4)) Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: long int too large to convert to int itertools.repeat() is documented [1] as being equivalent to: def repeat(object, times=None): # repeat(10, 3) --> 10 10 10 if times is None: while True: yield object else: for i in range(times): yield object The behavior of the CPython implementation is clearly wrong. If there are people relying on it - they already have code that would break in other implementations. (I would say not accepting None for times is a bug as well if you read the docs literally.) When implementation behavior differs from documentation it is a bug by definition and a fix should go in bug-fix releases. Reproducing old behavior is fairly trivial using an old_repeat(object, *args, **kwds) wrapper to distinguish between arguments passed positionally and by keyword. However, I seriously doubt that anyone would need that. [1] http://docs.python.org/3/library/itertools.html#itertools.repeat
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com