【问题标题】:Python 3 list slicing raises an index errorPython 3 列表切片引发索引错误
【发布时间】:2013-01-20 13:06:42
【问题描述】:

我遇到了一个问题,我猜这是 Python、我的计算机/Windows 或两者中的某种错误。

到目前为止,这对我来说还不是问题,我什至不知道它不应该发生。

从索引中切出列表时,应返回 [] 的值:

>>> l = [1, 2, 3]
>>> l[5:]
[]

这确实可以在我的 Mac 和我朋友的计算机上正常运行。

但是,当我在我的电脑上(Windows 7 Home Premium 64bit,芬兰语)时,我收到IndexError: list index out of range

>>> l = [1, 2, 3]
>>> l[5:]
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    l[5:]
IndexError: list index out of range

我有 Python 3.3.0 和 2.7.3,它在 2.7.3 上运行良好,但在 3.3.0 上出现错误。我已经尝试重新安装两个版本,没有效果。 Python 文档还说它不应该在 Python 3 上引发错误:http://docs.python.org/3/library/exceptions.html#IndexError

我可以使用简单的if len(l) &gt;= 2 轻松解决这个问题,但我宁愿不使用不需要的东西。

没有从谷歌找到太多,想知道是否有其他人遇到同样的问题,是否有解决方案?还是我应该联系 python 开发人员?

【问题讨论】:

  • 您测试过这是我怀疑的 IDLE(pyshell 是 IDLE 的一部分)。能不能在普通的python提示符下试试(打开CMD,从命令行运行python 3.3,再试一次)。
  • 我在 IDLE 2.7 和 3.3 中试过这个,但都没有表现出这种行为。我们需要更多关于 Mahi 正在使用的环境的线索。
  • @MartijnPieters 似乎在 cmd 上工作正常...得到了[],所以问题出在我的 IDLE 内?
  • @Mahi:看起来很像,但是其他在 Windows 上使用 IDLE 3.3 的人没有重现您的问题,所以它不仅仅是 IDLE 本身。
  • 这很奇怪。你的CPU型号?和语言环境?试试dis.dis('l=[1,2,3];l[5:]')

标签: python python-3.x indexing


【解决方案1】:

没有。我无法在 Win7 64 位 Python 3.3.0 安装上重现此错误。在命令 shell 和 IDLE 中,我看到的行为完全符合预期。

Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> l = [1, 2, 3]
>>> l[5:]
[]
>>> import dis
>>> dis.dis('l=[1,2,3];l[5:]')
  1           0 LOAD_CONST               0 (1)
              3 LOAD_CONST               1 (2)
              6 LOAD_CONST               2 (3)
              9 BUILD_LIST               3
             12 STORE_NAME               0 (l)
             15 LOAD_NAME                0 (l)
             18 LOAD_CONST               3 (5)
             21 LOAD_CONST               4 (None)
             24 BUILD_SLICE              2
             27 BINARY_SUBSCR
             28 POP_TOP
             29 LOAD_CONST               4 (None)
             32 RETURN_VALUE

请提供有关您可能对您的环境所做的任何更改的更多详细信息。

【讨论】:

  • pyshell 指向空闲。因此理论上它可能是 IDLE 中的一个错误。
  • @MartijnPieters:啊,谢谢。好吧,在我的 Python 3.3.0 64 位 Win7 安装中,我在 IDLE 中得到了完全相同的结果。
猜你喜欢
  • 2021-12-02
  • 1970-01-01
  • 2012-06-14
  • 2012-12-16
  • 2017-02-23
  • 2020-10-26
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
相关资源
最近更新 更多