New submission from Terry J. Reedy <[EMAIL PROTECTED]>: 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.) Main section: 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 following subsections. 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. ---------- assignee: georg.brandl components: Documentation messages: 69302 nosy: georg.brandl, tjreedy severity: normal status: open 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 <[EMAIL PROTECTED]> <http://bugs.python.org/issue3292> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com