[New-bugs-announce] [issue3292] Position index limit; s.insert(i,x) not same as s[i:i]=[x]
Terry J. Reedy
report at bugs.python.org
Sat Jul 5 23:37:34 CEST 2008
New submission from Terry J. Reedy <tjreedy at udel.edu>:
Suggested changes to Lib Ref Manual: Sequence Types --...(3.6 for 2.5)
(These are mostly based on an issue posted on c.l.p. The Plone
Archetypes package (which I know nothing of) was reported as suggesting
that users pass sys.maxint, to indicate 'insert at end', to one of their
functions that uses .insert. A user with an AMD64 did that ... and I
could not find doc proof that the crash was not a Python bug.)
Before the operation list, change "n, i and j are integers:" to "n, i,
j, and k are integers:"
After the above, add "An implementation may limit the range of position
indexes (some uses of i below)." I do not know if this limitation,
actual for CPython is documented elsewhere, but it should be here. In
particular, i is used as both position and slice index.
Consider using i only as a magnitude-limited position index (an
'index-sized integer' as one error message puts it) and j,k,l for
unlimited slice and other integers. This would slightly change the
suggestions above and entail replacements in the table here and in
Mutable Sequence Types
In 3.0, .count and .index are general sequence methods and should be
moved up to that section. (For .index, parameters i & j are not
(limited) position indexes but simply integers for comparison. The
notation change suggested above would make this clear without one having
to experiment or infer from the comparison rule.)
The line "s.insert(i, x) same as s[i:i] = [x]" is not true when i is
outside the range of allow position indexes. If i is not defined as a
limited range integer (and the implementation not changed ;-) add a
footnote "only when i is within the range of allowed position indexes."
Is there a policy on documenting possible operation-specific exceptions?
I consider them part of the interface. Or should I bring this up on pydev?
For 3.0, footnotes 3 and 7 (in this subsection) document 2, for 4
different operations. Here are a couple more related to this issue.
In the main section, for s[i]:
2.x IndexError: cannot fit 'long' into an index-sized integer
3.0 IndexError: cannot fit 'int' into an index-sized integer
In the subsection, for s.insert(i,x):
2.x OverflowError: long int too large to convert to int
3.0 OverflowError: Python int too large to convert to C ssize_t
I actually think the OverflowError should be changed to IndexError since
the problem is the same in both cases, but that is a different issue.
nosy: georg.brandl, tjreedy
title: Position index limit; s.insert(i,x) not same as s[i:i]=[x]
versions: Python 2.5, Python 2.6, Python 3.0
Python tracker <report at bugs.python.org>
More information about the New-bugs-announce