Issue 13340: list.index does not accept None as start or stop (original) (raw)

process

Status: closed Resolution: out of date
Dependencies: Superseder:
Assigned To: Nosy List: Aaron.Meurer, Carl.Friedrich.Bolz, alex, amaury.forgeotdarc, berker.peksag, iritkatriel, mark.dickinson, petri.lehtinen, python-dev, r.david.murray, rhettinger, serhiy.storchaka
Priority: normal Keywords:

Created on 2011-11-04 09:23 by Carl.Friedrich.Bolz, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (19)
msg147000 - (view) Author: Carl Friedrich Bolz-Tereick (Carl.Friedrich.Bolz) * Date: 2011-11-04 09:23
The list.index method does not accept None as start and stop, which makes the error message quite confusing: >>> [1, 2, 3].index(2, None, None) Traceback (most recent call last): File "", line 1, in TypeError: slice indices must be integers or None or have an __index__ method I checked this in 3.2.2 and 2.7.2. Seems similar to #12163.
msg147108 - (view) Author: Petri Lehtinen (petri.lehtinen) * (Python committer) Date: 2011-11-05 20:23
The same issue exists for tuples: >>> (1, 2, 3).index(2, None) Traceback (most recent call last): File "", line 1, in TypeError: slice indices must be integers or None or have an __index__ method
msg147111 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2011-11-05 21:30
New changeset 0f0eda4daac7 by Petri Lehtinen in branch '2.7': Accept None as start and stop parameters for list.index() and tuple.index() http://hg.python.org/cpython/rev/0f0eda4daac7 New changeset 5c1fcaf3cf1c by Petri Lehtinen in branch '3.2': Accept None as start and stop parameters for list.index() and tuple.index() http://hg.python.org/cpython/rev/5c1fcaf3cf1c New changeset c33aa14f4edb by Petri Lehtinen in branch 'default': Accept None as start and stop parameters for list.index() and tuple.index(). http://hg.python.org/cpython/rev/c33aa14f4edb
msg147113 - (view) Author: Petri Lehtinen (petri.lehtinen) * (Python committer) Date: 2011-11-05 21:32
Committed a fix for both list and tuple. I considered this a bug fix rather than a new feature based on discussion in #11828, especially , and applied the fix to 2.7 and 3.2, too.
msg147114 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2011-11-05 21:35
The relevant code is in _PyEval_SliceIndex() in Python/ceval.c.
msg147116 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2011-11-05 21:37
I think this "fix" was too hastily committed. 1) It was an API change. 2) It probably should have been done in _PyEval_SliceIndex(). Be careful. Don't rush to commit. Especially for backports.
msg147117 - (view) Author: Petri Lehtinen (petri.lehtinen) * (Python committer) Date: 2011-11-05 21:46
> 2) It probably should have been done in _PyEval_SliceIndex(). I saw that other code used the same approach as I used in the fix. The comment above _PyEval_SliceIndex() suggests it's used in other contexts too. It seems that 2.7 uses it to implement the SLICE opcode, while in 3.x it's only used to convert slice-like arguments. What do you suggest? Doing it in _PyEval_SliceIndex() in 2.7 is problematic, as we don't want x[None:2], right? :)
msg147120 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2011-11-05 22:17
The API in 2.7 shouldn't be changed. The error message can be fixed though. Also, it is not clear that the API should change even in 3.3. The list.index() method is not required to accept None. It is not different than other APIs that use PyArg_ParseTuple() with an "i" field for a start, stop, or step argument.
msg147121 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2011-11-05 22:29
str.index does accept None, though
msg147151 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2011-11-06 11:28
> What do you suggest? Doing it in _PyEval_SliceIndex() in 2.7 is > problematic, as we don't want x[None:2], right? :) Eh? Don't we already have this? Python 2.7.2 (default, Aug 22 2011, 13:53:27) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> range(5)[None:2] [0, 1] Or am I misunderstanding?
msg147153 - (view) Author: Petri Lehtinen (petri.lehtinen) * (Python committer) Date: 2011-11-06 11:46
> Or am I misunderstanding? Ah, no, sorry. I wasn't aware of this. Now the error message set by _PyEval_SliceIndex() makes sense. It doesn't itself accept None, but apply_slice() and assign_slice() handle the None case. There's still the question whether {list,tuple}.index() should accept None or not.
msg147162 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2011-11-06 17:13
> There's still the question whether {list,tuple}.index() should accept None or not. The API should not be changed for Py2.7 and Py3.2. Those changesets should be reverted. For Py3.3, it is open to discussion, but we probably don't need the change (making every other implementation also change for nearly zero benefit).
msg147163 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2011-11-06 17:18
One other thought: the API for list.index() doesn't exist in isolation. There is also str.index, the sequence abstract base class, and tons of code that has been written to emulate lists. This is an ancient API (approx 20 years) and should only be changed with care. IOW, I don't think this change should have been made at all, at least not without a discussion on python-dev and motivating use cases.
msg147171 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2011-11-06 19:15
New changeset 19ffa12ffdd4 by Petri Lehtinen in branch '2.7': Revert "Accept None as start and stop parameters for list.index() and tuple.index()" http://hg.python.org/cpython/rev/19ffa12ffdd4 New changeset ed0e85efac47 by Petri Lehtinen in branch '3.2': Revert "Accept None as start and stop parameters for list.index() and tuple.index()" http://hg.python.org/cpython/rev/ed0e85efac47 New changeset 106f9e1ad7ab by Petri Lehtinen in branch 'default': Revert "Accept None as start and stop parameters for list.index() and tuple.index()" http://hg.python.org/cpython/rev/106f9e1ad7ab
msg147172 - (view) Author: Petri Lehtinen (petri.lehtinen) * (Python committer) Date: 2011-11-06 19:20
It's now reverted on all branches. I posted to python-dev alreay earlier.
msg228937 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2014-10-10 01:22
Per discussion in the issue, I'm changing this to a bugfix on the message text. If the python-dev discussion resulted (or results in the future) in a desire to change the API, that should be a new issue.
msg263582 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2016-04-16 19:36
See http://thread.gmane.org/gmane.comp.python.devel/127502 for the python-dev thread.
msg376958 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2020-09-15 22:09
The error message was fixed under , so I think this issue can now be closed.
msg376977 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2020-09-16 07:15
Thank you for the reminder Irit. Your comments for issues and PRs are really helpful. Thank you for all this!
History
Date User Action Args
2022-04-11 14:57:23 admin set github: 57549
2020-09-16 07:15:26 serhiy.storchaka set status: open -> closednosy: + serhiy.storchakamessages: + resolution: out of datestage: needs patch -> resolved
2020-09-15 22:09:17 iritkatriel set nosy: + iritkatrielmessages: +
2016-04-16 19:36:04 berker.peksag set nosy: + berker.peksagmessages: + versions: + Python 3.6, - Python 3.4
2014-10-10 01:22:52 r.david.murray set versions: + Python 2.7, Python 3.4, Python 3.5, - Python 3.3nosy: + r.david.murraymessages: + stage: commit review -> needs patch
2013-07-12 13:56:05 Aaron.Meurer set nosy: + Aaron.Meurer
2012-02-25 08:08:27 eric.araujo set priority: high -> normalstage: resolved -> commit reviewversions: - Python 2.7, Python 3.2
2011-11-06 19:20:00 petri.lehtinen set messages: +
2011-11-06 19:15:23 python-dev set messages: +
2011-11-06 17🔞05 rhettinger set priority: normal -> highresolution: fixed -> (no value)messages: +
2011-11-06 17:13:58 rhettinger set messages: +
2011-11-06 11:46:58 petri.lehtinen set messages: +
2011-11-06 11:28:00 mark.dickinson set nosy: + mark.dickinsonmessages: +
2011-11-05 22:29:04 amaury.forgeotdarc set nosy: + amaury.forgeotdarcmessages: +
2011-11-05 22:17:33 rhettinger set messages: +
2011-11-05 21:46:24 petri.lehtinen set messages: +
2011-11-05 21:37:34 rhettinger set status: closed -> openmessages: +
2011-11-05 21:35:21 rhettinger set nosy: + rhettingermessages: +
2011-11-05 21:32:08 petri.lehtinen set messages: +
2011-11-05 21:30:20 python-dev set status: open -> closednosy: + python-devmessages: + resolution: fixedstage: needs patch -> resolved
2011-11-05 20:27:23 alex set nosy: + alex
2011-11-05 20:23:10 petri.lehtinen set versions: + Python 3.3nosy: + petri.lehtinenmessages: + components: + Interpreter Corestage: needs patch
2011-11-04 09:23:03 Carl.Friedrich.Bolz create